More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 70,503 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 43633458 | 5 hrs ago | IN | 0 ETH | 0.00000507 | ||||
Approve | 43616357 | 10 hrs ago | IN | 0 ETH | 0.00000422 | ||||
Approve | 43573712 | 23 hrs ago | IN | 0 ETH | 0.00000498 | ||||
Approve | 43554175 | 29 hrs ago | IN | 0 ETH | 0.00000571 | ||||
Approve | 43551628 | 29 hrs ago | IN | 0 ETH | 0.00000508 | ||||
Approve | 43545396 | 31 hrs ago | IN | 0 ETH | 0.0000043 | ||||
Approve | 43452201 | 2 days ago | IN | 0 ETH | 0.00000484 | ||||
Approve | 43422836 | 2 days ago | IN | 0 ETH | 0.00000424 | ||||
Approve | 43420123 | 2 days ago | IN | 0 ETH | 0.00000426 | ||||
Approve | 43366841 | 3 days ago | IN | 0 ETH | 0.00000497 | ||||
Approve | 43365305 | 3 days ago | IN | 0 ETH | 0.0000042 | ||||
Approve | 43354146 | 3 days ago | IN | 0 ETH | 0.0000042 | ||||
Approve | 43354141 | 3 days ago | IN | 0 ETH | 0.0000042 | ||||
Approve | 43350870 | 3 days ago | IN | 0 ETH | 0.00000436 | ||||
Approve | 43329522 | 3 days ago | IN | 0 ETH | 0.00000489 | ||||
Approve | 43322546 | 4 days ago | IN | 0 ETH | 0.00000432 | ||||
Approve | 43318329 | 4 days ago | IN | 0 ETH | 0.00000418 | ||||
Approve | 43288130 | 4 days ago | IN | 0 ETH | 0.00000517 | ||||
Approve | 43277001 | 4 days ago | IN | 0 ETH | 0.00000475 | ||||
Approve | 43234227 | 5 days ago | IN | 0 ETH | 0.00000554 | ||||
Approve | 43232999 | 5 days ago | IN | 0 ETH | 0.00000557 | ||||
Approve | 43226075 | 5 days ago | IN | 0 ETH | 0.00000446 | ||||
Approve | 43224502 | 5 days ago | IN | 0 ETH | 0.00000421 | ||||
Approve | 43214938 | 5 days ago | IN | 0 ETH | 0.00000515 | ||||
Approve | 43177915 | 5 days ago | IN | 0 ETH | 0.00000415 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
4190690 | 473 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
ZFPair
Compiler Version
v0.8.16+commit.07a7930e
ZkSolc Version
v1.3.8
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; import '../interfaces/ERC20/IERC20.sol'; import '../interfaces/protocol/core/IZFPair.sol'; import '../interfaces/protocol/core/IZFFactory.sol'; import '../interfaces/protocol/core/uniswap/IUniswapV2Callee.sol'; import '../libraries/utils/math/Math.sol'; import '../libraries/utils/math/UQ112x112.sol'; import '../libraries/security/ReentrancyGuard.sol'; import '../libraries/token/ERC20/ERC20WithPermit.sol'; import '../libraries/token/ERC20/utils/TransferHelper.sol'; import '../libraries/token/ERC20/utils/MetadataHelper.sol'; contract ZFPair is IZFPair, ERC20WithPermit, ReentrancyGuard { using TransferHelper for address; using UQ112x112 for uint224; /// @dev liquidity to be locked forever on first provision uint private constant MINIMUM_LIQUIDITY = 1000; uint private constant SWAP_FEE_POINT_PRECISION = 10000; uint private constant SWAP_FEE_POINT_PRECISION_SQ = 10000_0000; address public override factory; address public override token0; address public override token1; uint112 private reserve0; // uses single storage slot, accessible via getReserves uint112 private reserve1; // uses single storage slot, accessible via getReserves uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves uint public override price0CumulativeLast; uint public override price1CumulativeLast; uint public override kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event uint16 private constant SWAP_FEE_INHERIT = type(uint16).max; uint16 public override swapFeeOverride = SWAP_FEE_INHERIT; // track account balances, uses single storage slot struct Principal { uint112 principal0; uint112 principal1; uint32 timeLastUpdate; } mapping(address => Principal) private principals; /// @dev create and initialize the pair constructor(address _token0, address _token1) { factory = msg.sender; token0 = _token0; token1 = _token1; // try to set symbols for the pair token (bool success0, string memory symbol0) = MetadataHelper.getSymbol(_token0); (bool success1, string memory symbol1) = MetadataHelper.getSymbol(_token1); if (success0 && success1) { _initializeMetadata( string(abi.encodePacked("ZF ", symbol0, "/", symbol1, " LP Token")), string(abi.encodePacked(symbol0, "/", symbol1, " ZFLP")) ); } else { _initializeMetadata( "ZF LP Token", "ZFLP" ); } } /// @dev called by the factory to set the swapFeeOverride function setSwapFeeOverride(uint16 _swapFeeOverride) external override { require(msg.sender == factory, 'FORBIDDEN'); require(_swapFeeOverride <= 1000 || _swapFeeOverride == SWAP_FEE_INHERIT, 'INVALID_FEE'); swapFeeOverride = _swapFeeOverride; } /*////////////////////////////////////////////////////////////// VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ function getPrincipal(address account) external view override returns (uint112 principal0, uint112 principal1, uint32 timeLastUpdate) { Principal memory _principal = principals[account]; return ( _principal.principal0, _principal.principal1, _principal.timeLastUpdate ); } function _afterTokenTransfer( address from, address to, uint256 amount ) internal override { if (amount == 0) { return; } // Track account balances. (uint _reserve0, uint _reserve1) = _getReserves(); uint _totalSupply = totalSupply(); if (from != address(0)) { uint liquidity = balanceOf(from); principals[from] = Principal({ principal0: uint112(liquidity * _reserve0 / _totalSupply), principal1: uint112(liquidity * _reserve1 / _totalSupply), timeLastUpdate: uint32(block.timestamp) }); } if (to != address(0)) { uint liquidity = balanceOf(to); principals[to] = Principal({ principal0: uint112(liquidity * _reserve0 / _totalSupply), principal1: uint112(liquidity * _reserve1 / _totalSupply), timeLastUpdate: uint32(block.timestamp) }); } } function getReserves() external view override returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) { _reserve0 = reserve0; _reserve1 = reserve1; _blockTimestampLast = blockTimestampLast; } function getReservesSimple() external view override returns (uint112, uint112) { return (reserve0, reserve1); } function getSwapFee() public view override returns (uint16) { uint16 _swapFeeOverride = swapFeeOverride; return _swapFeeOverride == SWAP_FEE_INHERIT ? IZFFactory(factory).swapFee() : _swapFeeOverride; } function getReservesAndParameters() external view override returns (uint112 _reserve0, uint112 _reserve1, uint16 _swapFee) { _reserve0 = reserve0; _reserve1 = reserve1; _swapFee = getSwapFee(); } /*////////////////////////////////////////////////////////////// INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////*/ function _getReserves() private view returns (uint112, uint112) { return (reserve0, reserve1); } function _getBalances(address _token0, address _token1) private view returns (uint, uint) { return ( IERC20(_token0).balanceOf(address(this)), IERC20(_token1).balanceOf(address(this)) ); } // update reserves and, on the first call per block, price accumulators function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private { require(balance0 <= type(uint112).max && balance1 <= type(uint112).max, 'OVERFLOW'); uint32 blockTimestamp = uint32(block.timestamp); unchecked { uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) { // * never overflows, and + overflow is desired price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed; price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed; } } reserve0 = uint112(balance0); reserve1 = uint112(balance1); blockTimestampLast = blockTimestamp; emit Sync(reserve0, reserve1); } function _getFeeLiquidity(uint _totalSupply, uint _rootK2, uint _rootK1, uint8 _feeFactor) private pure returns (uint) { uint numerator = _totalSupply * (_rootK2 - _rootK1); uint denominator = (_feeFactor - 1) * _rootK2 + _rootK1; return numerator / denominator; } function _tryMintProtocolFee(uint112 _reserve0, uint112 _reserve1) private { uint _kLast = kLast; if (_kLast != 0) { IZFFactory _factory = IZFFactory(factory); address _feeTo = _factory.feeTo(); if (_feeTo != address(0)) { uint rootK = Math.sqrt(uint(_reserve0) * _reserve1); uint rootKLast = Math.sqrt(_kLast); uint liquidity = _getFeeLiquidity(totalSupply(), rootK, rootKLast, _factory.protocolFeeFactor()); if (liquidity > 0) { _mint(_feeTo, liquidity); } } } } /*////////////////////////////////////////////////////////////// Mint //////////////////////////////////////////////////////////////*/ /// @dev this low-level function should be called from a contract which performs important safety checks function mint(address to) external nonReentrant override returns (uint liquidity) { (uint112 _reserve0, uint112 _reserve1) = _getReserves(); (uint balance0, uint balance1) = _getBalances(token0, token1); uint amount0 = balance0 - _reserve0; uint amount1 = balance1 - _reserve1; _tryMintProtocolFee(_reserve0, _reserve1); { uint _totalSupply = totalSupply(); // must be defined here since totalSupply can update in `_tryMintProtocolFee` if (_totalSupply == 0) { liquidity = Math.sqrt(amount0 * amount1) - MINIMUM_LIQUIDITY; _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens } else { liquidity = Math.min(amount0 * _totalSupply / _reserve0, amount1 * _totalSupply / _reserve1); } require(liquidity != 0, 'INSUFFICIENT_LIQUIDITY_MINTED'); } _mint(to, liquidity); _update(balance0, balance1, _reserve0, _reserve1); kLast = uint256(reserve0) * reserve1; // reserve0 and reserve1 are up-to-date emit Mint(msg.sender, amount0, amount1); } /*////////////////////////////////////////////////////////////// Burn //////////////////////////////////////////////////////////////*/ /// @dev this low-level function should be called from a contract which performs important safety checks function burn(address to) external nonReentrant override returns (uint amount0, uint amount1) { (uint112 _reserve0, uint112 _reserve1) = _getReserves(); address _token0 = token0; address _token1 = token1; uint balance0 = IERC20(_token0).balanceOf(address(this)); uint balance1 = IERC20(_token1).balanceOf(address(this)); uint liquidity = balanceOf(address(this)); _tryMintProtocolFee(_reserve0, _reserve1); { uint _totalSupply = totalSupply(); // must be defined here since totalSupply can update in `_tryMintProtocolFee` // using balances ensures pro-rata distribution amount0 = (liquidity * balance0) / _totalSupply; amount1 = (liquidity * balance1) / _totalSupply; require(amount0 > 0 && amount1 > 0, 'INSUFFICIENT_LIQUIDITY_BURNED'); } _burn(address(this), liquidity); _token0.safeTransfer(to, amount0); _token1.safeTransfer(to, amount1); (balance0, balance1) = _getBalances(_token0, _token1); _update(balance0, balance1, _reserve0, _reserve1); kLast = uint256(reserve0) * reserve1; // reserve0 and reserve1 are up-to-date emit Burn(msg.sender, amount0, amount1, to); } /*////////////////////////////////////////////////////////////// Swap //////////////////////////////////////////////////////////////*/ /// @dev this low-level function should be called from a contract which performs important safety checks function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external override nonReentrant { require(amount0Out > 0 || amount1Out > 0, 'INSUFFICIENT_OUTPUT_AMOUNT'); (uint112 _reserve0, uint112 _reserve1) = _getReserves(); require(amount0Out < _reserve0 && amount1Out < _reserve1, 'INSUFFICIENT_LIQUIDITY'); uint balance0After; uint balance1After; { (address _token0, address _token1) = (token0, token1); if (amount0Out > 0) { _token0.safeTransfer(to, amount0Out); } if (amount1Out > 0) { _token1.safeTransfer(to, amount1Out); } if (data.length > 0) { IUniswapV2Callee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data); } (balance0After, balance1After) = _getBalances(_token0, _token1); } // At least one input is required. uint amount0In = balance0After > _reserve0 - amount0Out ? balance0After - (_reserve0 - amount0Out) : 0; uint amount1In = balance1After > _reserve1 - amount1Out ? balance1After - (_reserve1 - amount1Out) : 0; require(amount0In != 0 || amount1In != 0, 'INSUFFICIENT_INPUT_AMOUNT'); { // Checks the K. uint16 _swapFee = getSwapFee(); uint balance0Adjusted = (balance0After * SWAP_FEE_POINT_PRECISION) - (amount0In * _swapFee); uint balance1Adjusted = (balance1After * SWAP_FEE_POINT_PRECISION) - (amount1In * _swapFee); require(balance0Adjusted * balance1Adjusted >= uint(_reserve0) * _reserve1 * (SWAP_FEE_POINT_PRECISION_SQ), 'K'); } _update(balance0After, balance1After, _reserve0, _reserve1); emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to); } function swapFor0(uint amount0Out, address to) external override nonReentrant { require(amount0Out > 0, 'INSUFFICIENT_OUTPUT_AMOUNT'); (uint112 _reserve0, uint112 _reserve1) = _getReserves(); require(amount0Out < _reserve0, 'INSUFFICIENT_LIQUIDITY'); address _token0 = token0; _token0.safeTransfer(to, amount0Out); (uint balance0After, uint balance1After) = _getBalances(_token0, token1); uint amount1In = balance1After - _reserve1; require(amount1In != 0, 'INSUFFICIENT_INPUT_AMOUNT'); // Checks the K. uint balance1Adjusted = (balance1After * SWAP_FEE_POINT_PRECISION) - (amount1In * getSwapFee()); require(balance0After * balance1Adjusted >= uint(_reserve0) * _reserve1 * SWAP_FEE_POINT_PRECISION, 'K'); _update(balance0After, balance1After, _reserve0, _reserve1); emit Swap(msg.sender, 0, amount1In, amount0Out, 0, to); } function swapFor1(uint amount1Out, address to) external override nonReentrant { require(amount1Out != 0, 'INSUFFICIENT_OUTPUT_AMOUNT'); (uint112 _reserve0, uint112 _reserve1) = _getReserves(); require(amount1Out < _reserve1, 'INSUFFICIENT_LIQUIDITY'); address _token1 = token1; _token1.safeTransfer(to, amount1Out); (uint balance0After, uint balance1After) = _getBalances(token0, _token1); uint amount0In = balance0After - _reserve0; require(amount0In != 0, 'INSUFFICIENT_INPUT_AMOUNT'); // Checks the K. uint balance0Adjusted = (balance0After * SWAP_FEE_POINT_PRECISION) - (amount0In * getSwapFee()); require(balance0Adjusted * balance1After >= uint(_reserve0) * _reserve1 * SWAP_FEE_POINT_PRECISION, 'K'); _update(balance0After, balance1After, _reserve0, _reserve1); emit Swap(msg.sender, amount0In, 0, 0, amount1Out, to); } /*////////////////////////////////////////////////////////////// Skim & Sync //////////////////////////////////////////////////////////////*/ /** * @dev Force balances to match reserves, taking out positive balances */ function skim(address to) external override nonReentrant { address _token0 = token0; address _token1 = token1; (uint balance0, uint balance1) = _getBalances(_token0, _token1); _token0.safeTransfer(to, balance0 - reserve0); _token1.safeTransfer(to, balance1 - reserve1); } /** * @dev Force reserves to match balances */ function sync() external override nonReentrant { (uint balance0, uint balance1) = _getBalances(token0, token1); _update(balance0, balance1, reserve0, reserve1); } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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); /** * @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); }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); /** * @dev Returns the permit typehash */ // solhint-disable-next-line func-name-mixedcase function PERMIT_TYPEHASH() external pure returns (bytes32); }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; import "./uniswap/IUniswapV2Factory.sol"; /// @dev ZF factory interface with full Uniswap V2 compatibility interface IZFFactory is IUniswapV2Factory { function isPair(address pair) external view returns (bool); function acceptFeeToSetter() external; function swapFee() external view returns (uint16); function setSwapFee(uint16 newFee) external; function protocolFeeFactor() external view returns (uint8); function setProtocolFeeFactor(uint8 newFactor) external; function setSwapFeeOverride(address pair, uint16 swapFeeOverride) external; }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; import "./uniswap/IUniswapV2Pair.sol"; /// @dev ZF pair interface with full Uniswap V2 compatibility interface IZFPair is IUniswapV2Pair { function getPrincipal(address account) external view returns (uint112 principal0, uint112 principal1, uint32 timeLastUpdate); function swapFor0(uint amount0Out, address to) external; // support simple swap function swapFor1(uint amount1Out, address to) external; // support simple swap function getReservesAndParameters() external view returns (uint112 reserve0, uint112 reserve1, uint16 swapFee); function getReservesSimple() external view returns (uint112, uint112); function swapFeeOverride() external view returns (uint16); function setSwapFeeOverride(uint16 newSwapFeeOverride) external; function getSwapFee() external view returns (uint16); }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity >=0.5.0; /// @dev Uniswap V2 callee interface interface IUniswapV2Callee { function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external; }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity >=0.5.0; /// @dev Uniswap V2 factory interface interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); 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(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity >=0.5.0; import '../../../ERC20/IERC20.sol'; import '../../../ERC20/IERC20Metadata.sol'; import '../../../ERC20/IERC20Permit.sol'; /// @dev Uniswap V2 pair interface interface IUniswapV2Pair is IERC20, IERC20Metadata, IERC20Permit { //event Approval(address indexed owner, address indexed spender, uint value); // IERC20 //event Transfer(address indexed from, address indexed to, uint value); // IERC20 //function name() external pure returns (string memory); // IERC20Metadata //function symbol() external pure returns (string memory); // IERC20Metadata //function decimals() external pure returns (uint8); // IERC20Metadata //function totalSupply() external view returns (uint); // IERC20 //function balanceOf(address owner) external view returns (uint); // IERC20 //function allowance(address owner, address spender) external view returns (uint); // IERC20 //function approve(address spender, uint value) external returns (bool); // IERC20 //function transfer(address to, uint value) external returns (bool); // IERC20 //function transferFrom(address from, address to, uint value) external returns (bool); // IERC20 //function DOMAIN_SEPARATOR() external view returns (bytes32); // IERC20Permit //function PERMIT_TYPEHASH() external pure returns (bytes32); // IERC20Permit //function nonces(address owner) external view returns (uint); // IERC20Permit //function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; // IERC20Permit event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); //function MINIMUM_LIQUIDITY() external pure returns (uint); // UNUSED function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; //function initialize(address, address) external; // UNUSED }
// SPDX-License-Identifier: AGPL-3.0-or-later // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../utils/Strings.sol"; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: AGPL-3.0-or-later // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) 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() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; import '../../../interfaces/ERC20/IERC20.sol'; import '../../../interfaces/ERC20/IERC20Metadata.sol'; /** * @dev Implementation of ERC20 interface. */ contract ERC20 is IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * initialization. */ function _initializeMetadata(string memory name_, string memory symbol_) internal { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() external view override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() external pure override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public override returns (bool) { address owner = msg.sender; _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public override returns (bool) { address owner = msg.sender; _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public override returns (bool) { address spender = msg.sender; _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { address owner = msg.sender; _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { address owner = msg.sender; uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal { //require(from != address(0), "ERC20: transfer from the zero address"); //require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { //require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { //require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal { //require(owner != address(0), "ERC20: approve from the zero address"); //require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; import './ERC20.sol'; import '../../cryptography/ECDSA.sol'; import '../../../interfaces/ERC20/IERC20Permit.sol'; /** * @dev Implementation of ERC20 interface with EIP2612 support. */ contract ERC20WithPermit is ERC20, IERC20Permit { /** * @dev See {IERC20Permit-DOMAIN_SEPARATOR}. */ bytes32 public immutable override DOMAIN_SEPARATOR = keccak256( abi.encode( //keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'), 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f, //keccak256(bytes('ZF LP Token')), 0x6511e36e5d2f401c54acf6e396173073db572b463aec87cff7b0e9eb32c66952, //keccak256(bytes('1')), 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6, 324, // Hardcoded because block.chainid is not supported in zkSync 2.0. address(this) ) ); /** * @dev See {IERC20Permit-PERMIT_TYPEHASH}. */ // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant override PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; /** * @dev See {IERC20Permit-nonces}. */ mapping(address => uint256) public override nonces; /** * @dev See {IERC20Permit-permit}. */ function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) override external { require(block.timestamp <= deadline, 'EXPIRED'); bytes32 structHash; // Unchecked because nonce cannot realistically overflow. unchecked { structHash = keccak256( abi.encode( PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline ) ); } bytes32 hash = ECDSA.toTypedDataHash(DOMAIN_SEPARATOR, structHash); address signer = ECDSA.recover(hash, v, r, s); require(signer == owner, 'INVALID_SIGNATURE'); _approve(owner, spender, value); } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; library MetadataHelper { /** * @dev Returns the status and symbol of the token. * * @param token The address of a ERC20 token. * * Return boolean indicating the status and the symbol as string; * * NOTE: Symbol is not the standard interface and some tokens may not support it. * Calling against these tokens will not success, with an empty result. */ function getSymbol(address token) internal view returns (bool, string memory) { // bytes4(keccak256(bytes("symbol()"))) (bool success, bytes memory returndata) = token.staticcall(abi.encodeWithSelector(0x95d89b41)); if (success) { return (true, abi.decode(returndata, (string))); } else { return (false, ""); } } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; /// @dev Helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } }
// SPDX-License-Identifier: AGPL-3.0-or-later // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; /** * @dev A library for performing various math operations. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @notice Calculates the square root of x, rounding down. * @dev Uses the Babylonian method https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method. * @param x The uint256 number for which to calculate the square root. * @return result The result as an uint256. * * See https://github.com/paulrberg/prb-math/blob/701b1badb9a0951f27e344602726ead71f138b1a/contracts/PRBMath.sol#L599 */ function sqrt(uint256 x) internal pure returns (uint256 result) { if (x == 0) { return 0; } // Set the initial guess to the least power of two that is greater than or equal to sqrt(x). uint256 xAux = uint256(x); result = 1; if (xAux >= 0x100000000000000000000000000000000) { xAux >>= 128; result <<= 64; } if (xAux >= 0x10000000000000000) { xAux >>= 64; result <<= 32; } if (xAux >= 0x100000000) { xAux >>= 32; result <<= 16; } if (xAux >= 0x10000) { xAux >>= 16; result <<= 8; } if (xAux >= 0x100) { xAux >>= 8; result <<= 4; } if (xAux >= 0x10) { xAux >>= 4; result <<= 2; } if (xAux >= 0x8) { result <<= 1; } // The operations can never overflow because the result is max 2^127 when it enters this block. unchecked { result = (result + x / result) >> 1; result = (result + x / result) >> 1; result = (result + x / result) >> 1; result = (result + x / result) >> 1; result = (result + x / result) >> 1; result = (result + x / result) >> 1; result = (result + x / result) >> 1; // Seven iterations should be enough uint256 roundedDownResult = x / result; return result >= roundedDownResult ? roundedDownResult : result; } } }
// SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity ^0.8.0; /** * @dev A library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format)) * * Range: [0, 2**112 - 1] * Resolution: 1 / 2**112 */ library UQ112x112 { uint224 constant Q112 = 2**112; // encode a uint112 as a UQ112x112 function encode(uint112 y) internal pure returns (uint224 z) { z = uint224(y) * Q112; // never overflows } // divide a UQ112x112 by a uint112, returning a UQ112x112 function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) { z = x / uint224(y); } }
{ "compilerPath": "", "experimental": {}, "optimizer": { "enabled": true, "mode": "3" } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getPrincipal","outputs":[{"internalType":"uint112","name":"principal0","type":"uint112"},{"internalType":"uint112","name":"principal1","type":"uint112"},{"internalType":"uint32","name":"timeLastUpdate","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesAndParameters","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint16","name":"_swapFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservesSimple","outputs":[{"internalType":"uint112","name":"","type":"uint112"},{"internalType":"uint112","name":"","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_swapFeeOverride","type":"uint16"}],"name":"setSwapFeeOverride","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapFeeOverride","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"swapFor0","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"swapFor1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
f305d7190000000000000000000000003355df6d4c9c3035724fd0e3914de96a5a83aaf40000000000000000000000000000000000000000000000000000000005f5e1000000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000bfd8b6c1df000000000000000000000000000013bd7a61b46950ff0e9b41571dc4c503ee85404200000000000000000000000000000000000000000000000000000000646cd005
Deployed Bytecode
0x0004000000000002000a00000000000200000000030100190000006003300270000006eb0430019700030000004103550002000000010355000006eb0030019d000100000000001f00000001012001900000000c0000c13d1ba604750000040f000000a001000039000000400010043f0000000002000416000000000220004c0000004d0000c13d0000000002000031000000bf03200039000000200900008a000000000393016f000006ec04300041000006ed0440009c0000001e0000213d000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba800010430000000400030043f0000001f0320018f000000020400036700000005052002720000002c0000613d00000000060000190000000507600210000000000874034f000000000808043b000000a00770003900000000008704350000000106600039000000000756004b000000240000413d000000000630004c0000003b0000613d0000000505500210000000000454034f0000000303300210000000a005500039000000000605043300000000063601cf000000000636022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000363019f0000000000350435000006ee03000041000000400420008c00000000040000190000000004034019000006ee02200197000000000520004c000000000300a019000006ee0220009c00000000020400190000000002036019000000000220004c0000004d0000c13d000000a00600043d000006ef0260009c0000004d0000213d000000c00500043d000006ef0250009c0000004f0000a13d000000000100001900001ba800010430000000400200043d000000a003200039000000000400041000000000004304350000008003200039000001440400003900000000004304350000006003200039000006f00400004100000000004304350000004003200039000006f10400004100000000004304350000000001120436000006f2030000410000000000310435000006f30320009c000000180000213d000000c003200039000000400030043f000006eb03000041000006eb0410009c000000000103801900000040011002100000000002020433000006eb0420009c00000000020380190000006002200210000000000112019f0000000002000414000006eb0420009c0000000002038019000000c002200210000000000112019f000006f4011001c70000801002000039000a00000009001d000900000005001d000800000006001d1ba61ba10000040f0000000806000029000000090d0000290000000a0b00002900000001022001900000004d0000613d000000000101043b000000800010043f00000001090000390000000601000039000000000091041b0000000e01000039000000000201041a0000ffff022001bf000000000021041b0000000701000039000000000201041a000006f5022001970000000003000411000000000232019f000000000021041b0000000801000039000000000201041a000006f502200197000000000262019f000000000021041b0000000901000039000000000201041a000006f5022001970000000002d2019f000000000021041b000000040a000039000000400100043d0000000002a10436000006f6030000410000000000320435000006f70310009c000000180000213d0000004003100039000000400030043f0000000003000414000000040460008c000000a40000c13d000000010c0000390000000102000031000000bf0000013d000006eb04000041000006eb0520009c000000000204801900000040022002100000000001010433000006eb0510009c00000000010480190000006001100210000000000121019f000006eb0230009c00000000020400190000000002034019000000c002200210000000000121019f0000000002060019000700000009001d00080000000a001d1ba61ba10000040f000000090d0000290000000a0b000029000000080a0000290000000709000029000000010c20018f00030000000103550000006001100270000106eb0010019d000006eb021001970000006001000039000000000320004c000000dd0000c13d0000000002c0004c0000010a0000c13d000000400100043d000006f90210009c000000180000213d0000002002100039000000400020043f00000000040100190000000000010435000000400100043d0000000002a10436000006f6030000410000000000320435000006f70310009c000000180000213d000600000004001d00090000000c001d00080000000a001d000700000009001d0000004003100039000000400030043f00000000030004140000000404d0008c0000014e0000c13d00000001020000390000000103000031000001630000013d000006f80120009c000000180000213d0000003f012000390000000003b1016f000000400100043d0000000003310019000000000413004b00000000040000190000000104004039000006f80530009c000000180000213d0000000104400190000000180000c13d000000400030043f0000000002210436000000030300036700000001050000310000001f0450018f0000000505500272000000fa0000613d000000000600001900000005076002100000000008720019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b000000f20000413d000000000640004c000000c20000613d0000000505500210000000000353034f00000000025200190000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000c20000013d0000000032010434000006ee04000041000000200520008c00000000050000190000000005044019000006ee06200197000000000760004c000000000400a019000006ee0660009c000000000405c019000000000440004c0000004d0000c13d0000000004030433000006f80540009c0000004d0000213d000000000232001900000000031400190000003f01300039000006ee04000041000000000521004b00000000050000190000000005048019000006ee01100197000006ee06200197000000000761004b0000000004008019000000000161013f000006ee0110009c00000000010500190000000001046019000000000110004c0000004d0000c13d00000020013000390000000001010433000006f80410009c000000180000213d0000003f041000390000000004b4016f000000400800043d0000000004480019000000000584004b00000000050000190000000105004039000006f80640009c000000180000213d0000000105500190000000180000c13d000000400040043f0000000007080019000000000418043600000040033000390000000005310019000000000225004b0000004d0000213d000000000210004c0000014a0000613d000000000200001900000000054200190000000006320019000000000606043300000000006504350000002002200039000000000512004b000001430000413d0000000001140019000000090d0000290000000004070019000000ca0000013d000006eb04000041000006eb0520009c000000000204801900000040022002100000000001010433000006eb0510009c00000000010480190000006001100210000000000121019f000006eb0230009c00000000020400190000000002034019000000c002200210000000000121019f00000000020d00191ba61ba10000040f000000010220018f00030000000103550000006001100270000106eb0010019d000006eb031001970000006001000039000000000430004c0000019f0000c13d000000000220004c000001cd0000c13d000000400100043d000006f90210009c000000180000213d0000002002100039000000400020043f0000000000010435000000400100043d000900000001001d000006f70110009c0000000802000029000000180000213d00000009030000290000004001300039000000400010043f0000000b010000390000000003130436000006ff01000041000500000003001d0000000000130435000000400100043d000600000001001d000006f70110009c000000180000213d00000006030000290000004001300039000000400010043f00000000022304360000070001000041000300000002001d000000000012043500000009010000290000000001010433000400000001001d000006f80110009c000000180000213d0000000301000039000200000001001d000000000101041a000000010210019000000001011002700000007f0310018f0000000001036019000100000001001d0000001f0110008c00000000010000190000000101002039000000010110018f000000000112004b000002ed0000613d000007020100004100000000001004350000002201000039000000040010043f000007030100004100001ba800010430000006f80130009c0000000a04000029000000180000213d0000003f01300039000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006f80640009c000000180000213d0000000105500190000000180000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000001bd0000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000001b50000413d000000000750004c000001660000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000001660000013d0000000032010434000006ee04000041000000200520008c00000000050000190000000005044019000006ee06200197000000000760004c000000000400a019000006ee0660009c000000000405c019000000000440004c0000000a080000290000004d0000c13d0000000005030433000006f80450009c0000004d0000213d000000000432001900000000051500190000003f01500039000006ee02000041000000000341004b00000000030000190000000003028019000006ee01100197000006ee06400197000000000761004b0000000002008019000000000161013f000006ee0110009c00000000010300190000000001026019000000000110004c0000004d0000c13d00000020015000390000000003010433000006f80130009c000000180000213d0000003f01300039000000000181016f000000400200043d0000000001120019000000000621004b00000000060000190000000106004039000006f80710009c000000180000213d0000000106600190000000180000c13d000000400010043f000000000132043600000040055000390000000006530019000000000446004b0000004d0000213d000000000430004c0000020d0000613d000000000400001900000000061400190000000007540019000000000707043300000000007604350000002004400039000000000634004b000002060000413d000000000331001900000000000304350000000903000029000000000330004c0000016e0000613d000000400400043d0000002005400039000006fa03000041000400000005001d0000000000350435000900000004001d0000002305400039000000060400002900000020034000390000000004040433000000000640004c000002260000613d000000000600001900000000075600190000000008360019000000000808043300000000008704350000002006600039000000000746004b0000021f0000413d00000000055400190000000000050435000000090500002900000000045400190000002305400039000006fb06000041000000000065043500000024064000390000000005020433000000000750004c000002390000613d000000000700001900000000086700190000000009170019000000000909043300000000009804350000002007700039000000000857004b000002320000413d0000000006650019000000000006043500000000044500190000002405400039000006fc060000410000000000650435000000090600002900000000046400490000000d0540003900000000005604350000004c044000390000000a05000029000000000454016f0000000005640019000000000445004b00000000040000190000000104004039000500000005001d000006f80550009c0000000605000029000000180000213d0000000104400190000000180000c13d0000000504000029000000400040043f00000020084000390000000004050433000000000540004c0000025e0000613d000000000500001900000000068500190000000007350019000000000707043300000000007604350000002005500039000000000645004b000002570000413d000600000008001d00000000038400190000000000030435000000050300002900000000033400190000002004300039000006fb05000041000000000054043500000021043000390000000002020433000000000520004c000002720000613d000000000500001900000000064500190000000007150019000000000707043300000000007604350000002005500039000000000625004b0000026b0000413d0000000001420019000000000001043500000000013200190000002102100039000006fd030000410000000000320435000000050300002900000000013100490000000602100039000000000023043500000045011000390000000a02000029000000000221016f0000000001320019000000000221004b00000000020000190000000102004039000006f80310009c000000180000213d0000000102200190000000180000c13d000000400010043f00000009010000290000000001010433000300000001001d000006f80110009c000000180000213d0000000301000039000200000001001d000000000101041a000000010210019000000001021002700000007f0320018f0000000002036019000100000002001d0000001f0220008c00000000020000190000000102002039000000000121013f0000000101100190000001990000c13d0000000101000029000000200110008c000002bb0000413d00000002010000290000000000100435000006eb010000410000000002000414000006eb0320009c0000000001024019000000c001100210000006fe011001c700008010020000391ba61ba10000040f00000001022001900000004d0000613d00000003030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b000002bb0000813d000000000002041b0000000102200039000000000312004b000002b70000413d00000003010000290000001f0110008c000003cc0000a13d00000002010000290000000000100435000006eb010000410000000002000414000006eb0320009c0000000001024019000000c001100210000006fe011001c700008010020000391ba61ba10000040f00000001022001900000000a020000290000004d0000613d000000030300002900000000032301700000002002000039000000000101043b0000000906000029000002db0000613d0000002002000039000000000400001900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000002d30000413d0000000304000029000000000343004b000002e90000813d00000003030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f000000090400002900000000024200190000000002020433000000000232016f000000000021041b000000010100003900000003020000290000000102200210000003d90000013d0000000101000029000000200110008c0000030d0000413d00000002010000290000000000100435000006eb010000410000000002000414000006eb0320009c0000000001024019000000c001100210000006fe011001c700008010020000391ba61ba10000040f00000001022001900000004d0000613d00000004030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b0000030d0000813d000000000002041b0000000102200039000000000312004b000003090000413d00000004010000290000001f0110008c0000033f0000a13d00000002010000290000000000100435000006eb010000410000000002000414000006eb0320009c0000000001024019000000c001100210000006fe011001c700008010020000391ba61ba10000040f00000001022001900000000a020000290000004d0000613d000000040300002900000000032301700000002002000039000000000101043b00000009060000290000032d0000613d0000002002000039000000000400001900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000003250000413d0000000404000029000000000343004b0000033b0000813d00000004030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f000000090400002900000000024200190000000002020433000000000232016f000000000021041b0000000101000039000000040200002900000001022002100000034c0000013d0000000401000029000000000110004c0000000001000019000003450000613d0000000501000029000000000101043300000004040000290000000302400210000000010300008a000000000223022f000000000232013f000000000221016f0000000101400210000000000112019f0000000202000029000000000012041b00000006010000290000000001010433000900000001001d000006f80110009c0000000801000029000000180000213d000000000101041a000000010210019000000001021002700000007f0320018f0000000002036019000500000002001d0000001f0220008c00000000020000190000000102002039000000000121013f0000000101100190000001990000c13d0000000501000029000000200110008c000003810000413d00000008010000290000000000100435000006eb010000410000000002000414000006eb0320009c0000000001024019000000c001100210000006fe011001c700008010020000391ba61ba10000040f00000001022001900000004d0000613d00000009030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000005010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b000003810000813d000000000002041b0000000102200039000000000312004b0000037d0000413d00000009010000290000001f0110008c000003b30000a13d00000008010000290000000000100435000006eb010000410000000002000414000006eb0320009c0000000001024019000000c001100210000006fe011001c700008010020000391ba61ba10000040f00000001022001900000000a020000290000004d0000613d000000090300002900000000032301700000002002000039000000000101043b0000000606000029000003a10000613d0000002002000039000000000400001900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000003990000413d0000000904000029000000000343004b000003af0000813d00000009030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f000000060400002900000000024200190000000002020433000000000232016f000000000021041b000000090100002900000001011002100000000702000029000003c00000013d0000000901000029000000000110004c0000000001000019000003b90000613d0000000301000029000000000101043300000009040000290000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000000000121019f0000000802000029000000000012041b000000800100043d000001400000044300000160001004430000002001000039000001000010044300000007010000290000012000100443000007010100004100001ba70001042e0000000301000029000000000110004c0000000001000019000003d20000613d0000000401000029000000000101043300000003040000290000000302400210000000010300008a000000000223022f000000000232013f000000000221016f0000000101400210000000000112019f0000000202000029000000000012041b00000005010000290000000001010433000900000001001d000006f80110009c0000000801000029000000180000213d000000000101041a000000010210019000000001021002700000007f0320018f0000000002036019000400000002001d0000001f0220008c00000000020000190000000102002039000000000121013f0000000101100190000001990000c13d0000000401000029000000200110008c0000040e0000413d00000008010000290000000000100435000006eb010000410000000002000414000006eb0320009c0000000001024019000000c001100210000006fe011001c700008010020000391ba61ba10000040f00000001022001900000004d0000613d00000009030000290000001f023000390000000502200270000000200330008c0000000002004019000000000301043b00000004010000290000001f01100039000000050110027000000000011300190000000002230019000000000312004b0000040e0000813d000000000002041b0000000102200039000000000312004b0000040a0000413d00000009010000290000001f0110008c000004400000a13d00000008010000290000000000100435000006eb010000410000000002000414000006eb0320009c0000000001024019000000c001100210000006fe011001c700008010020000391ba61ba10000040f00000001022001900000000a020000290000004d0000613d000000090300002900000000032301700000002002000039000000000101043b00000005060000290000042e0000613d0000002002000039000000000400001900000000056200190000000005050433000000000051041b000000200220003900000001011000390000002004400039000000000534004b000004260000413d0000000904000029000000000343004b0000043c0000813d00000009030000290000000303300210000000f80330018f000000010400008a000000000334022f000000000343013f000000050400002900000000024200190000000002020433000000000232016f000000000021041b000000090100002900000001011002100000000702000029000003c00000013d0000000901000029000000000110004c0000000001000019000004460000613d0000000601000029000000000101043300000009040000290000000302400210000000010300008a000000000223022f000000000232013f000000000121016f0000000102400210000003c00000013d000006eb03000041000006eb0410009c00000000010380190000004001100210000006eb0420009c00000000020380190000006002200210000000000112019f0000000002000414000006eb0420009c0000000002038019000000c002200210000000000112019f000006f4011001c700008010020000391ba61ba10000040f0000000102200190000004620000613d000000000101043b000000000001042d000000000100001900001ba8000104300000000003010019000006eb010000410000000004000414000006eb0540009c0000000001044019000000c00110021000000060022002100000000001120019000007040110004100000000020300191ba61ba10000040f0000000102200190000004730000613d000000000101043b000000000001042d000000000100001900001ba80001043000110000000000020000008009000039000000400090043f0000000001000031000000040110008c000012880000413d001100000000001d0000000201000367000000000101043b000000e001100270000007050210009c000004b00000a13d000007060210009c000004dc0000213d000007130210009c000005480000a13d000007140210009c000005de0000a13d000007150210009c0000076d0000613d000007160210009c000007910000613d000007170110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000400310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000002010003670000000402100370000000000202043b000006ef0320009c000012880000213d0000002401100370000000000301043b00000000010004111ba618070000040f0000000101000039000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000071f0210009c000005170000a13d000007200210009c000005720000a13d000007210210009c000006200000a13d000007220210009c000007e30000613d000007230210009c000007fe0000613d000007240110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000a01000039000000000101041a00000070021002700000073702200197000000400300043d0000002004300039000000000024043500000737011001970000000000130435000006eb01000041000006eb0230009c0000000001034019000000400110021000000757011001c700001ba70001042e000007070210009c0000059b0000a13d000007080210009c0000063f0000a13d000007090210009c0000081a0000613d0000070a0210009c000008400000613d0000070b0110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000601000039000e00000001001d000000000101041a000000020110008c0000000001000019000000010100c0391ba6141e0000040f00000002010000390000000e02000029000000000012041b0000000901000039000000000201041a0000000801000039000000000101041a000006ef01100197000006ef022001971ba614330000040f0000000a03000039000000000403041a0000073703400197000000700440027000000737044001971ba615260000040f00000001010000390000000e02000029000000000012041b000006eb01000041000000400200043d000006eb0320009c0000000001024019000000400110021000001ba70001042e0000072c0210009c000005bd0000213d000007320210009c000006740000213d000007350210009c000008730000613d000007360110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000304000039000000000304041a000000010530019000000001013002700000007f0210018f000000000701001900000000070260190000001f0270008c00000000020000190000000102002039000000010220018f000000000225004b0000078b0000c13d000000400100043d0000000002710436000000000550004c00000bfd0000c13d000001000400008a000000000343016f0000000000320435000000000270004c0000002003000039000000000300601900000c0a0000013d0000071a0210009c0000069b0000213d0000071d0210009c000009220000613d0000071e0110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000200310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000004010000390000000201100367000000000101043b000006ef0210009c000012880000213d0000000000100435000000200000043f000000400200003900000000010000191ba6044e0000040f000000000101041a000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e000007270210009c000006d80000213d0000072a0210009c000009f10000613d0000072b0110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d000000400100043d000e00000001001d00000745010000410000000000100439000000000100041200000004001004430000002400000443000080050100003900000044020000391ba604640000040f0000000e030000290000000000130435000006eb01000041000006eb0230009c000000000103401900000040011002100000073e011001c700001ba70001042e0000070e0210009c000007300000213d000007110210009c00000a0b0000613d000007120110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000701000039000000000101041a000006ef01100197000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000072d0210009c0000074f0000213d000007300210009c00000a550000613d000007310110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000201000039000000000101041a000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e000007180210009c00000a710000613d000007190110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000200310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000004010000390000000201100367000000000101043b000e00000001001d000006ef0110009c000012880000213d0000000602000039000000000102041a000000020110008c00000ab40000613d0000000201000039000600000002001d000b00000001001d000000000012041b0000000801000039000000000201041a0000000a01000039000700000001001d000000000101041a0000000903000039000000000303041a000000400a00043d000007540400004100000000004a04350000000404a000390000000005000410000c00000005001d0000000000540435000006ef03300197000d00000003001d0000073703100197000a00000003001d00000070011002700000073701100197000900000001001d0000000001000414000006ef02200197000000040320008c000800000002001d00000c740000c13d0000000103000031000000200130008c0000002004000039000000000403401900000ca60000013d000007250210009c00000a960000613d000007260110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000b01000039000000000101041a000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000070c0210009c00000ac60000613d0000070d0110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000400310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000002020003670000000401200370000000000101043b000006ef0310009c000012880000213d0000002402200370000000000202043b000e00000002001d000006ef0220009c000012880000213d00000000001004350000000101000039000000200010043f0000004002000039000d00000002001d00000000010000191ba6044e0000040f0000000e020000290000000000200435000000200010043f00000000010000190000000d020000291ba6044e0000040f000000000101041a000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e000007330210009c00000b0f0000613d000007340110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000400310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000002010003670000000402100370000000000202043b000006ef0320009c000012880000213d0000002401100370000000000301043b00000000010004111ba61ad10000040f0000000101000039000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000071b0210009c00000b340000613d0000071c0110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000200310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000004010000390000000201100367000000000101043b000006ef0210009c000012880000213d00000000001004350000000f01000039000000200010043f000000400200003900000000010000191ba6044e0000040f000e00000001001d000000400100043d000d00000001001d1ba6137c0000040f0000000e01000029000000000101041a0000000d030000290000004002300039000000e004100270000000000042043500000737021001970000000005230436000000700110027000000737031001970000000000350435000000400100043d000e00000001001d1ba613720000040f0000000e040000290000000001410049000006eb02000041000006eb0310009c0000000001028019000006eb0340009c000000000204401900000040022002100000006001100210000000000121019f00001ba70001042e000007280210009c00000b4f0000613d000007290110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000400310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000002010003670000000402100370000000000202043b000e00000002001d0000002401100370000000000101043b000d00000001001d000006ef0110009c000012880000213d0000000601000039000000000201041a000000020220008c00000ab40000613d0000000202000039000000000021041b0000000e03000029000000000130004c00000c330000613d0000000a01000039000000000101041a000000700210027000000737042001970000073702100197000000000123004b00000cfb0000813d000a00000002001d0000000801000039000000000101041a000006ef01100197000b00000001001d0000000d02000029000c00000004001d1ba61b0d0000040f0000000901000039000000000101041a000006ef021001970000000b010000291ba614330000040f0000000c03000029000000000432004b00000b800000413d000000000332004b00000ce90000613d0000075f0320009c00000b800000213d000900000001001d000b00000002001d0000000e01000039000000000101041a0000ffff0110018f0000ffff0210008c000010630000c13d0000000701000039000000000201041a000000400300043d0000076001000041000800000003001d00000000001304350000000001000414000006ef02200197000000040320008c0000101f0000c13d0000000103000031000000200130008c00000020040000390000000004034019000010510000013d0000070f0210009c00000b860000613d000007100110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d1ba6139a0000040f0000ffff0110018f000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000072e0210009c00000ba20000613d0000072f0110009c000012880000c13d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d000000400100043d00000742020000410000000000210435000006eb02000041000006eb0310009c000000000102801900000040011002100000073e011001c700001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000404000039000000000304041a000000010530019000000001013002700000007f0210018f000000000601001900000000060260190000001f0260008c00000000020000190000000102002039000000000232013f000000010220019000000bf20000613d000007020100004100000000001004350000002201000039000000040010043f000007030100004100001ba8000104300000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000400310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000002010003670000000402100370000000000202043b000e00000002001d000006ef0220009c000012880000213d0000002401100370000000000101043b000d00000001001d0000000001000411000b00000001001d00000000001004350000000101000039000c00000001001d000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b0000000e020000290000000000200435000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b000000000101041a0000000d03000029000000000231004b00000d0d0000813d000000400100043d00000064021000390000075103000041000000000032043500000044021000390000075203000041000000000032043500000024021000390000002503000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000074b011001c700001ba8000104300000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000c01000039000000000101041a000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000e01000039000000000101041a0000ffff0110018f000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000a01000039000000000101041a000e00000001001d1ba6139a0000040f0000000e0500002900000070025002700000073702200197000000400300043d000000200430003900000000002404350000ffff0110018f0000004002300039000000000012043500000737015001970000000000130435000006eb01000041000006eb0230009c000000000103401900000040011002100000073d011001c700001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000200310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000004010000390000000201100367000000000101043b0000ffff0210008c000012880000213d0000000702000039000000000202041a000006ef022001970000000003000411000000000223004b00000c1c0000c13d0000ffff0110018f000003e90210008c00000cc50000413d0000ffff0210008c00000cc50000613d000000400100043d00000044021000390000073b03000041000000000032043500000024021000390000000b03000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba8000104300000000001000416000000000110004c000012880000c13d0000000001000031000000040210008a000006ee03000041000000800420008c00000000040000190000000004034019000006ee02200197000000000520004c000000000300a019000006ee0220009c00000000020400190000000002036019000000000220004c000012880000c13d00000002020003670000002403200370000000000303043b000e00000003001d0000000403200370000000000303043b000d00000003001d0000004403200370000000000403043b000006ef03400197000b00000003001d000c00000004001d000006ef0340009c000012880000213d0000006403200370000000000303043b000006f80430009c000012880000213d0000002304300039000006ee05000041000000000614004b00000000060000190000000006058019000006ee07100197000006ee04400197000000000874004b0000000005008019000000000474013f000006ee0440009c00000000040600190000000004056019000000000440004c000012880000c13d0000000404300039000000000242034f000000000202043b000a00000002001d000006f80220009c000012880000213d00000024033000390000000a02000029000900000003001d0000000002230019000000000112004b000012880000213d0000000601000039000000000201041a000000020220008c00000ab40000613d000800000009001d0000000202000039000000000021041b0000000d030000290000000e0100002900000000011301a000000c330000613d0000000a01000039000000000101041a000000700210027000000737022001970000073701100197000700000001001d000000000131004b00000cfb0000a13d0000000e01000029000000000112004b00000cfb0000a13d000400000002001d0000000901000039000000000101041a000006ef01100197000600000001001d0000000801000039000000000101041a000006ef01100197000500000001001d0000000d01000029000000000110004c000008d70000613d00000005010000290000000c020000290000000d030000291ba61b0d0000040f0000000e01000029000000000110004c000008de0000613d00000006010000290000000c020000290000000e030000291ba61b0d0000040f0000000a01000029000000000110004c00000f700000c13d000000050100002900000006020000291ba614330000040f000c00000001001d000a00000002001d0000000d010000290000000702000029000000000112004b00000b800000413d0000000d01000029000000070200002900000000011200490000000c02000029000900000001001d0000000001120049000000000221004b00000000020000190000000102002039000000000220004c000000000100c019000800000001001d0000000e010000290000000402000029000000000112004b00000b800000413d0000000e01000029000000040200002900000000011200490000000a02000029000600000001001d0000000001120049000000000221004b00000000020000190000000102002039000000000220004c000000000100c019000500000001001d0000000c010000290000000902000029000000000121004b0000090e0000213d0000000a010000290000000602000029000000000121004b00000ce90000a13d0000000e01000039000000000101041a0000ffff0110018f0000ffff0210008c0000128a0000c13d0000000701000039000000000201041a000000400300043d0000076001000041000300000003001d00000000001304350000000001000414000006ef02200197000000040320008c000012440000c13d0000000103000031000000200130008c00000020040000390000000004034019000012760000013d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000200310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000004010000390000000201100367000000000101043b000e00000001001d000006ef0110009c000012880000213d0000000602000039000000000102041a000000020110008c00000ab40000613d0000000201000039000a00000002001d000c00000001001d000000000012041b0000000a01000039000b00000001001d000000000101041a000d00000001001d0000000901000039000000000201041a0000000801000039000000000101041a000006ef01100197000006ef022001971ba614330000040f0000000d0400002900000070034002700000073703300197000007370440019700000000050100190000000006020019000000000145004b00000b800000413d000000000136004b00000b800000413d0000000001450049000600000001001d00000000010400190000000002030019000d00000003001d000800000004001d000700000005001d000900000006001d1ba6159a0000040f00000009070000290000000d0400002900000000084700490000000c01000029000000000101041a000000000210004c00000d400000c13d00000008060000290000000707000029000000000167004b0000096f0000613d000000010100008a000000060200002900000000212100d9000000000181004b00000b800000413d000000060100002900000000211800aa00000b800000613d00000080021002700000075b0310009c000000000201a0190000075c030000410000075b0410009c000000010300a0390000002004300210000006f80520009c00000000030420190000004004200270000006f80520009c00000000020420190000001004300210000006eb0520009c00000000030420190000002004200270000006eb0520009c000000000204201900000008043002100000ffff0520008c0000000003042019000000100420027000000000020420190000000404300210000000ff0520008c00000000030420190000000804200270000000000204201900000002043002100000000f0520008c000000000304201900000004042002700000000002042019000000070220008c0000000002000019000000010200203900000000022301cf00000000432100d90000000002230019000000020320008c00000d530000413d000000010220027000000000432100d90000000002230019000000020320008c00000d530000413d000000010220027000000000432100d90000000002230019000000020320008c00000d530000413d000000010220027000000000432100d90000000002230019000000020320008c00000d530000413d000000010220027000000000432100d90000000002230019000000020320008c00000d530000413d000000010220027000000000432100d90000000002230019000000020320008c00000d530000413d000000010220027000000000432100d90000000002230019000000020320008c00000d530000413d000000010220027000000000312100d9000000000312004b0000000001024019000400000001001d000003e80110008c00000b800000413d000500000008001d000003e8020000390000000c01000029000300000002001d000000000021041b0000000000000435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b000000000201041a000003e90300008a000000000332004b00000b800000213d0000000403000029000003e80330008a000c00000003001d000003e802200039000000000021041b000000400100043d00000003020000290000000000210435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f000006fe011001c70000800d0200003900000003030000390000075504000041000000000500001900000000060000191ba61b9c0000040f000000010120019000000f5b0000c13d000012880000013d0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d000000400100043d00000012020000390000000000210435000006eb02000041000006eb0310009c000000000102801900000040011002100000073e011001c700001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000200310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000004010000390000000201100367000000000101043b000e00000001001d000006ef0110009c000012880000213d0000000601000039000d00000001001d000000000101041a000000020110008c0000000001000019000000010100c0391ba6141e0000040f00000002010000390000000d02000029000000000012041b0000000901000039000000000301041a0000000802000039000000000202041a000006ef01200197000006ef02300197000c00000001001d000b00000002001d1ba614330000040f00000000040200190000000a05000039000000000205041a0000073702200197000000000321004b00000b800000413d00000000032100490000000c010000290000000e02000029000c00000004001d000a00000005001d1ba61b0d0000040f0000000c030000290000000a01000029000000000101041a00000070011002700000073701100197000000000213004b00000b800000413d00000000031300490000000b010000290000000e020000291ba61b0d0000040f00000001010000390000000d02000029000000000012041b000006eb01000041000000400200043d000006eb0320009c0000000001024019000000400110021000001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000801000039000000000101041a000006ef01100197000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000200310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000004010000390000000201100367000000000101043b000006ef0210009c000012880000213d00000000001004350000000501000039000000200010043f000000400200003900000000010000191ba6044e0000040f000000000101041a000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000400310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000002010003670000000402100370000000000202043b000e00000002001d0000002401100370000000000101043b000d00000001001d000006ef0110009c000012880000213d0000000601000039000000000201041a000000020220008c00000c2e0000c13d000000400100043d00000044021000390000077103000041000000000032043500000024021000390000001f03000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba8000104300000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000e00310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000002010003670000000402100370000000000202043b000e00000002001d000006ef0220009c000012880000213d0000002402100370000000000202043b000d00000002001d000006ef0220009c000012880000213d0000006402100370000000000202043b000c00000002001d0000004402100370000000000202043b000b00000002001d0000008401100370000000000101043b000a00000001001d000000ff0110008c000012880000213d0000073f010000410000000000100439000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000740011001c70000800b020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b0000000c02000029000000000121004b00000d590000a13d000000400100043d00000044021000390000075003000041000000000032043500000024021000390000000703000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba8000104300000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000a01000039000000000301041a000000400100043d000e00000001001d0000073702300197000000e004300270000000700330027000000737033001971ba613720000040f0000000e040000290000000001410049000006eb02000041000006eb0310009c0000000001028019000006eb0340009c000000000204401900000040022002100000006001100210000000000121019f00001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000d01000039000000000101041a000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000400310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000004010000390000000201100367000000000101043b000e00000001001d000006ef0110009c000012880000213d0000000001000411000b00000001001d00000000001004350000000101000039000c00000001001d000000200010043f0000004002000039000d00000002001d00000000010000191ba6044e0000040f0000000e020000290000000000200435000000200010043f00000000010000190000000d020000291ba6044e0000040f000000000101041a00000024020000390000000202200367000000000202043b0000000003120019000000000123004b00000000010000190000000101004039000000010110019000000c450000613d000007020100004100000000001004350000001101000039000000040010043f000007030100004100001ba8000104300000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000000310004c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d0000000901000039000000000101041a000006ef01100197000000400200043d0000000000120435000006eb01000041000006eb0320009c000000000102401900000040011002100000073e011001c700001ba70001042e0000000001000416000000000110004c000012880000c13d000000040100008a0000000001100031000006ee02000041000000600310008c00000000030000190000000003024019000006ee01100197000000000410004c000000000200a019000006ee0110009c00000000010300190000000001026019000000000110004c000012880000c13d00000002010003670000000402100370000000000202043b000e00000002001d000006ef0220009c000012880000213d0000002402100370000000000202043b000d00000002001d000006ef0220009c000012880000213d0000004401100370000000000101043b000c00000001001d0000000e0100002900000000001004350000000101000039000b00000001001d000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b0000000002000411000a00000002001d0000000000200435000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b000000000201041a000000010100008a000900000002001d000000000112004b00000e2d0000c13d0000000e010000290000000d020000290000000c030000291ba618070000040f000000400100043d0000000b020000290000000000210435000006eb02000041000006eb0310009c000000000102801900000040011002100000073e011001c700001ba70001042e000000400100043d0000000002610436000000000550004c00000c510000c13d000001000400008a000000000343016f0000000000320435000000000360004c0000002003000039000000000300601900000c610000013d0000000000400435000000000370004c000000000300001900000c0a0000613d000007660400004100000000030000190000000005320019000000000604041a000000000065043500000001044000390000002003300039000000000573004b00000c030000413d0000002002300039000e00000001001d1ba613870000040f000000400100043d000d00000001001d0000000e020000291ba6135c0000040f0000000d040000290000000001410049000006eb02000041000006eb0310009c0000000001028019000006eb0340009c000000000204401900000040022002100000006001100210000000000121019f00001ba70001042e000000400100043d00000044021000390000073803000041000000000032043500000024021000390000000903000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba8000104300000000202000039000000000021041b0000000e03000029000000000130004c00000cd00000c13d000000400100043d00000044021000390000076703000041000000000032043500000024021000390000001a03000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba8000104300000000b010000290000000e020000291ba61ad10000040f000000400100043d0000000c020000290000000000210435000006eb02000041000006eb0310009c000000000102801900000040011002100000073e011001c700001ba70001042e0000000000400435000000000260004c000000000200001900000c5f0000613d0000075303000041000000000200001900000000042100190000002004400039000000000503041a000000000054043500000001033000390000002002200039000000000462004b00000c570000413d0000000002210019000000200300003900000000023200190000000002120049000e00000001001d1ba613870000040f000000400100043d000d00000001001d0000000e020000291ba6135c0000040f0000000d040000290000000001410049000006eb02000041000006eb0310009c0000000001028019000006eb0340009c000000000204401900000040022002100000006001100210000000000121019f00001ba70001042e000006eb04000041000006eb0310009c0000000001048019000006eb03a0009c000000000304001900000000030a40190000004003300210000000c001100210000000000131019f00000703011001c700050000000a001d1ba61ba10000040f000000050a00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c930000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c8b0000413d000000000750004c00000ca20000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000d1a0000613d0000001f01400039000000600110018f0000000004a10019000000000114004b00000000010000190000000101004039000006f80240009c00000e790000213d000000010110019000000e790000c13d000500000004001d000000400040043f000000200130008c000012880000413d00000000010a0433000400000001001d0000075401000041000000050a00002900000000001a04350000000401a000390000000c02000029000000000021043500000000010004140000000d02000029000000040220008c00000e430000c13d0000000103000031000000200130008c0000002004000039000000000403401900000e740000013d0000000e02000039000000000302041a0000073c03300197000000000113019f000000000012041b000006eb01000041000000400200043d000006eb0320009c0000000001024019000000400110021000001ba70001042e0000000a01000039000000000101041a000007370410019700000070011002700000073702100197000000000123004b00000cfb0000813d000a00000002001d0000000901000039000000000101041a000006ef01100197000b00000001001d0000000d02000029000c00000004001d1ba61b0d0000040f0000000801000039000000000101041a000006ef011001970000000b020000291ba614330000040f0000000c03000029000000000431004b00000b800000413d000000000331004b00000edc0000c13d000000400100043d00000044021000390000076e03000041000000000032043500000024021000390000001903000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba800010430000000400100043d00000044021000390000076803000041000000000032043500000024021000390000001603000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba80001043000000000033100490000000b010000290000000e020000291ba61ad10000040f000000400100043d0000000c020000290000000000210435000006eb02000041000006eb0310009c000000000102801900000040011002100000073e011001c700001ba70001042e000000400200043d0000001f0430018f000000050330027200000d270000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000d1f0000413d000000000540004c00000d360000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba80001043000000008050000290000000706000029000000000256004b00000d490000613d000000010200008a000000060300002900000000323200d9000000000212004b00000b800000413d000000000250004c00000d530000613d000000000247004b00000d510000613d000000010200008a00000000328200d9000000000212004b00000b800000413d000000000240004c00000f520000c13d000007020100004100000000001004350000001201000039000000040010043f000007030100004100001ba8000104300000000e0100002900000000001004350000000501000039000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b000000000201041a0000000103200039000000000031041b000000400300043d000000c0013000390000000c040000290000000000410435000000a001300039000000000021043500000080013000390000000b02000029000000000021043500000060013000390000000d02000029000000000021043500000040013000390000000e020000290000000000210435000000c001000039000000000113043600000742020000410000000000210435000c00000003001d000007430230009c00000e790000213d0000000c04000029000000e002400039000900000002001d000000400020043f000006eb02000041000006eb0310009c000000000102801900000040011002100000000003040433000006eb0430009c00000000030280190000006003300210000000000113019f0000000003000414000006eb0430009c0000000002034019000000c002200210000000000112019f000006f4011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b000800000001001d0000000c0100002900000100021000390000074401000041000700000002001d000000000012043500000745010000410000000000100439000000000100041200000004001004430000002400000443000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000746011001c700008005020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b0000000c0300002900000122023000390000000804000029000000000042043500000102023000390000000000120435000000420100003900000009020000290000000000120435000007470120009c00000e790000213d0000000c010000290000016001100039000000400010043f000006eb010000410000000703000029000006eb0230009c00000000020100190000000002034019000000400220021000000009030000290000000003030433000006eb0430009c00000000030180190000006003300210000000000223019f0000000003000414000006eb0430009c0000000001034019000000c001100210000000000121019f000006f4011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000400200043d0000000204000367000000c403400370000000000303043b000007480530009c000011960000213d0000000a050000290000001b0550008a000000010550008c000011960000213d000000000101043b000000a404400370000000000404043b000000600520003900000000003504350000004003200039000000000043043500000020032000390000000a04000029000000000043043500000000001204350000000000000435000006eb010000410000000003000414000006eb0430009c0000000003018019000006eb0420009c00000000010240190000004001100210000000c002300210000000000112019f0000074d011001c700000001020000391ba61ba10000040f00000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050440027200000e060000613d00000000060000190000000507600210000000000871034f000000000808043b00000000008704350000000106600039000000000746004b00000dff0000413d000000000650004c00000e140000613d00000003055002100000000504400210000000000604043300000000065601cf000000000656022f000000000741034f000000000707043b0000010005500089000000000757022f00000000055701cf000000000565019f0000000000540435000100000003001f00030000000103550000000102200190000012e10000613d0000000001000433000006ef01100198000013380000c13d000000400100043d00000044021000390000074f03000041000000000032043500000024021000390000001803000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba8000104300000000c010000290000000902000029000000000112004b00000ef40000813d000000400100043d00000044021000390000076503000041000000000032043500000024021000390000001d03000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba800010430000006eb02000041000006eb0310009c0000000001028019000006eb03a0009c00000000020a40190000004002200210000000c001100210000000000121019f00000703011001c70000000d020000291ba61ba10000040f000000050a00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000e610000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000e590000413d000000000750004c00000e700000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000f2c0000613d0000001f01400039000000600110018f0000000001a10019000006f80210009c00000e7f0000a13d000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba800010430000000400010043f000000200130008c000012880000413d00000005010000290000000001010433000300000001001d0000000c010000290000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b000000000101041a000500000001001d0000000a0100002900000009020000291ba6159a0000040f0000000b01000029000000000101041a000200000001001d0000000501000029000000000110004c0000100f0000c13d0000000001000415000000100110008a00000020011000c90000000202000029000000000220004c00000d530000613d0000000505000029000000030200002900000000325200a9000000020600002900000000346200d9000000200110011a000300000004001d000000000104001f000000040100002900000000135100a9000400000003001d000000000136004b0000115b0000213d0000000201000029000000000121004b0000115b0000213d0000000c010000290000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b000000000201041a0000000501000029000100000002001d000000000112004b000011d20000813d000000400100043d00000064021000390000075803000041000000000032043500000044021000390000075903000041000000000032043500000024021000390000002203000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000074b011001c700001ba8000104300000075f0310009c00000b800000213d000900000002001d000b00000001001d0000000e01000039000000000101041a0000ffff0110018f0000ffff0210008c000010e30000c13d0000000701000039000000000201041a000000400300043d0000076001000041000800000003001d00000000001304350000000001000414000006ef02200197000000040320008c0000109f0000c13d0000000103000031000000200130008c00000020040000390000000004034019000010d10000013d0000000e0100002900000000001004350000000b01000029000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000000101043b0000000a02000029000006ef02200197000a00000002001d0000000000200435000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d0000000c0200002900000009030000290000000002230049000000000101043b000000000021041b000000400100043d0000000000210435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f000006fe011001c70000800d02000039000000030300003900000764040000410000000e050000290000000a060000291ba61b9c0000040f000000010120019000000be50000c13d000012880000013d000000400200043d0000001f0430018f000000050330027200000f390000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f310000413d000000000540004c00000f480000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba800010430000000060200002900000000322100a900000000325200d9000500000008001d00000000318100a900000000314100d9000000000312004b0000000001024019000c00000001001d0000000c01000029000000000110004c00000fdc0000c13d000000400100043d00000044021000390000075e03000041000000000032043500000024021000390000001d03000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba800010430000007690100004100000000001004390000000b010000290000000400100443000006eb010000410000000002000414000006eb0320009c0000000001024019000000c0011002100000076a011001c700008002020000391ba61ba10000040f00000001022001900000000802000029000012880000613d000000000101043b000000000110004c000012880000613d000000400300043d0000006401300039000000000021043500000044013000390000000e02000029000000000021043500000024013000390000000d0200002900000000002104350000076b01000041000000000013043500000004013000390000000002000411000000000021043500000084013000390000000a0400002900000000004104350000001f0240018f000c00000003001d000000a40130003900000009030000290000000203300367000000050440027200000fa30000613d000000000500001900000005065002100000000007610019000000000663034f000000000606043b00000000006704350000000105500039000000000645004b00000f9b0000413d000000000520004c00000fb20000613d0000000504400210000000000343034f00000000044100190000000302200210000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f00000000002404350000000a020000290000000001210019000000000001043500000000010004140000000b02000029000000040220008c00000fd60000613d0000000a020000290000001f02200039000000200300008a000000000232016f0000076c030000410000076c0420009c0000000002038019000006eb030000410000000c05000029000006eb0450009c0000000004030019000000000405401900000040044002100000006002200210000000000242019f000006eb0410009c0000000001038019000000c001100210000000000112019f0000076d011000410000000b020000291ba61b9c0000040f00000000030100190000006003300270000106eb0030019d000006eb0430019700030000000103550000000102200190000011ac0000613d0000000c010000290000075c0110009c00000e790000813d0000000c01000029000000400010043f000008e10000013d0000000e010000290000000c020000291ba61a0e0000040f0000000701000029000000090200002900000008030000290000000d040000291ba615260000040f0000000b01000029000000000101041a00000737021001970000007001100270000007370110019700000000212100a90000000d02000039000000000012041b000000400100043d00000020021000390000000503000029000000000032043500000006020000290000000000210435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f00000741011001c70000800d0200003900000002030000390000075d0400004100000000050004111ba61b9c0000040f0000000101200190000012880000613d00000001010000390000000a02000029000000000012041b000000400100043d0000000c020000290000000000210435000006eb02000041000006eb0310009c000000000102801900000040011002100000073e011001c700001ba70001042e000000010100008a000000050200002900000000122100d90000000401000029000000000112004b00000b800000413d0000000201000029000000000110004c00000d530000613d00000000010004150000000f0110008a00000020011000c90000000303000029000000000232004b00000b800000413d00000ea40000013d000006eb03000041000006eb0410009c00000000010380190000000805000029000006eb0450009c00000000030540190000004003300210000000c001100210000000000131019f00000761011001c71ba61ba10000040f000000080a00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000103d0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000010350000413d000000000750004c0000104d0000613d0000000506600210000000000761034f000000080800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000110f0000613d0000001f01400039000000600210018f00000008010000290000000001120019000000000221004b00000000020000190000000102004039000006f80410009c00000e790000213d000000010220019000000e790000c13d000000400010043f000000200130008c000012880000413d000000080100002900000000010104330000ffff0210008c000012880000213d0000000c050000290000000b060000290000000003560049000000010200008a000800000003001d00000000433200d9000000000313004b000000090700002900000b800000413d00002710436000c9000000080400002900000000414100a9000000000413004b00000b800000413d0000000001130049000000000370004c000010770000613d00000000327200d9000000000212004b00000b800000413d00000000217100a90000000a0200002900000000325200a900002710322000c9000000000121004b000010fd0000413d00000009010000290000000b020000290000000a030000290000000c040000291ba615260000040f000000400100043d00000040021000390000000e030000290000000000320435000000200210003900000008030000290000000000320435000000600210003900000000000204350000000000010435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f00000762011001c70000800d020000390000000303000039000007630400004100000000050004110000000d060000291ba61b9c0000040f00000001012001900000118d0000c13d000012880000013d000006eb03000041000006eb0410009c00000000010380190000000805000029000006eb0450009c00000000030540190000004003300210000000c001100210000000000131019f00000761011001c71ba61ba10000040f000000080a00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000010bd0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000010b50000413d000000000750004c000010cd0000613d0000000506600210000000000761034f000000080800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000011350000613d0000001f01400039000000600210018f00000008010000290000000001120019000000000221004b00000000020000190000000102004039000006f80410009c00000e790000213d000000010220019000000e790000c13d000000400010043f000000200130008c000012880000413d000000080100002900000000010104330000ffff0210008c000012880000213d0000000c050000290000000b060000290000000003560049000000010200008a000800000003001d00000000433200d9000000000313004b000000090700002900000b800000413d00002710436000c9000000080400002900000000144100a9000000000143004b00000b800000413d0000000001430049000000000343004b000010f70000613d00000000321200d9000000000272004b00000b800000413d00000000217100a90000000a0200002900000000322500a900002710322000c9000000000121004b0000116d0000813d000000400100043d00000044021000390000077003000041000000000032043500000024021000390000000103000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba800010430000000400200043d0000001f0430018f00000005033002720000111c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000011140000413d000000000540004c0000112b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba800010430000000400200043d0000001f0430018f0000000503300272000011420000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000113a0000413d000000000540004c000011510000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba800010430000000400100043d00000044021000390000075a03000041000000000032043500000024021000390000001d03000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba8000104300000000b0100002900000009020000290000000c030000290000000a040000291ba615260000040f000000400100043d00000060021000390000000e03000029000000000032043500000008020000290000000002210436000000400310003900000000000304350000000000020435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f00000762011001c70000800d020000390000000303000039000007630400004100000000050004110000000d060000291ba61b9c0000040f0000000101200190000012880000613d00000001010000390000000602000039000000000012041b000006eb01000041000000400200043d000006eb0320009c0000000001024019000000400110021000001ba70001042e000000240120003900000022040000390000000000410435000007390100004100000000001204350000000401200039000000200400003900000000004104350000004401200039000007480330009c000013070000a13d0000074c03000041000000000031043500000064012000390000074a030000410000000000310435000006eb01000041000006eb0320009c000000000102401900000040011002100000074b011001c700001ba800010430000000400200043d0000001f0340018f0000000504400272000011b90000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000011b10000413d000000000530004c000011c80000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba8000104300000000c010000290000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000012880000613d000000050300002900000001020000290000000002320049000000000101043b000000000021041b0000000b01000029000000000101041a000000000231004b00000b800000413d000000050300002900000000013100490000000b02000029000000000012041b000000400100043d0000000000310435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f000006fe011001c70000800d02000039000000030300003900000755040000410000000c0500002900000000060000191ba61b9c0000040f0000000101200190000012880000613d0000000201000029000000040200002900000000121200d9000b00000002001d0000000c0100002900000005020000291ba6187f0000040f00000008010000290000000e020000290000000b030000291ba61b0d0000040f0000000d010000290000000e0200002900000003030000291ba61b0d0000040f00000008010000290000000d020000291ba614330000040f0000000a0300002900000009040000291ba615260000040f0000000701000029000000000101041a00000737021001970000007001100270000007370110019700000000212100a90000000d02000039000000000012041b000000400100043d0000002002100039000000030300002900000000003204350000000b020000290000000000210435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f00000741011001c70000800d020000390000000303000039000007560400004100000000050004110000000e060000291ba61b9c0000040f0000000101200190000012880000613d00000001010000390000000602000029000000000012041b000000400100043d0000002002100039000000030300002900000000003204350000000b020000290000000000210435000006eb02000041000006eb0310009c0000000001028019000000400110021000000757011001c700001ba70001042e000006eb03000041000006eb0410009c00000000010380190000000305000029000006eb0450009c00000000030540190000004003300210000000c001100210000000000131019f00000761011001c71ba61ba10000040f000000030a00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000012620000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000125a0000413d000000000750004c000012720000613d0000000506600210000000000761034f000000030800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000013120000613d0000001f01400039000000600210018f00000003010000290000000001120019000000000221004b00000000020000190000000102004039000006f80410009c00000e790000213d000000010220019000000e790000c13d000000400010043f000000200130008c000012880000413d000000030100002900000000010104330000ffff0210008c0000128a0000a13d000000000100001900001ba8000104300000000c020000290000075f0220009c00000b800000213d0000000c020000290000000903000029000000000232004b000012960000a13d000000010200008a000000080300002900000000323200d9000000000212004b00000b800000413d0000000c0200002900002710322000c9000000080300002900000000433100a9000000000432004b00000b800000413d0000000a040000290000075f0440009c00000b800000213d0000000a040000290000000605000029000000000454004b000012a80000a13d000000010400008a000000050500002900000000545400d9000000000414004b00000b800000413d0000000a0400002900002710544000c9000000050500002900000000155100a9000000000154004b00000b800000413d00000000013200490000000004540049000000000232004b000012b60000613d000000010200008a00000000321200d9000000000242004b00000b800000413d00000000211400a90000000402000029000000070300002900000000322300a90000076f322000d1000000000121004b000010fd0000413d0000000c010000290000000a02000029000000070300002900000004040000291ba615260000040f000000400100043d00000060021000390000000e03000029000000000032043500000040021000390000000d03000029000000000032043500000020021000390000000503000029000000000032043500000008020000290000000000210435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f00000762011001c70000800d020000390000000303000039000007630400004100000000050004110000000b060000291ba61b9c0000040f0000000101200190000012880000613d0000118d0000013d000000400200043d0000001f0430018f0000000503300272000012ee0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000012e60000413d000000000540004c000012fd0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba8000104300000074903000041000000000031043500000064012000390000074a030000410000000000310435000006eb01000041000006eb0320009c000000000102401900000040011002100000074b011001c700001ba800010430000000400200043d0000001f0430018f00000005033002720000131f0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013170000413d000000000540004c0000132e0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba8000104300000000e02000029000000000121004b0000134a0000c13d0000000e010000290000000d020000290000000b030000291ba61ad10000040f000006eb010000410000001102000029000006eb0320009c0000000002018019000000400300043d000006eb0430009c000000000103401900000040011002100000006002200210000000000112019f00001ba70001042e000000400100043d00000044021000390000074e03000041000000000032043500000024021000390000001103000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba80001043000000020030000390000000004310436000000000302043300000000003404350000004001100039000000000430004c0000136b0000613d000000000400001900000000054100190000002004400039000000000624001900000000060604330000000000650435000000000534004b000013640000413d000000000231001900000000000204350000001f02300039000000200300008a000000000232016f0000000001210019000000000001042d000006eb0440019700000040051000390000000000450435000007370330019700000020041000390000000000340435000007370220019700000000002104350000006001100039000000000001042d000007720210009c000013810000813d0000006001100039000000400010043f000000000001042d000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba8000104300000001f02200039000000200300008a000000000232016f0000000001120019000000000221004b00000000020000190000000102004039000006f80310009c000013940000213d0000000102200190000013940000c13d000000400010043f000000000001042d000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba80001043000010000000000020000000e01000039000000000101041a0000ffff0110018f0000ffff0210008c000013ef0000c13d0000000701000039000000000201041a000000400a00043d000007600100004100000000001a04350000000001000414000006ef02200197000000040320008c000013ae0000c13d0000000103000031000000200130008c00000020040000390000000004034019000013df0000013d000006eb03000041000006eb0410009c0000000001038019000006eb04a0009c00000000030a40190000004003300210000000c001100210000000000131019f00000761011001c700010000000a001d1ba61ba10000040f000000010a00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000013cc0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000013c40000413d000000000750004c000013db0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000013f80000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000006f80410009c000013f20000213d0000000102200190000013f20000c13d000000400010043f0000001f0130008c000013f00000a13d00000000010a04330000ffff0210008c000013f00000213d000000000001042d000000000100001900001ba800010430000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba800010430000000400200043d0000001f0430018f0000000503300272000014050000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000013fd0000413d000000000540004c000014140000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba800010430000000000110004c000014210000613d000000000001042d000000400100043d00000044021000390000077103000041000000000032043500000024021000390000001f03000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba80001043000030000000000020000000005020019000000400b00043d000007540200004100000000002b04350000000402b00039000000000600041000000000006204350000000003000414000006ef02100197000000040120008c000014440000c13d0000000103000031000000200130008c00000020040000390000000004034019000014790000013d000100000006001d000300000005001d000006eb01000041000006eb0430009c0000000003018019000006eb04b0009c00000000010b40190000004001100210000000c003300210000000000113019f00000703011001c700020000000b001d1ba61ba10000040f000000020b00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000014640000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000145c0000413d000000000750004c000014730000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000003050000290000000106000029000014da0000613d0000001f01400039000000600110018f000000000ab1001900000000011a004b00000000010000190000000101004039000006f802a0009c000014d20000213d0000000101100190000014d20000c13d0000004000a0043f0000001f0130008c000014d80000a13d00000000070b0433000007540100004100000000001a04350000000401a0003900000000006104350000000001000414000006ef02500197000000040320008c000014940000c13d0000000103000031000000200130008c00000020040000390000000004034019000014c70000013d000200000007001d000006eb03000041000006eb0410009c0000000001038019000006eb04a0009c00000000030a40190000004003300210000000c001100210000000000131019f00000703011001c700030000000a001d1ba61ba10000040f000000030a00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000014b30000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000014ab0000413d000000000750004c000014c20000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000000207000029000015000000613d0000001f01400039000000600110018f0000000001a10019000006f80210009c000014d20000213d000000400010043f000000200130008c000014d80000413d00000000020a04330000000001070019000000000001042d000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba800010430000000000100001900001ba800010430000000400200043d0000001f0430018f0000000503300272000014e70000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000014df0000413d000000000540004c000014f60000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba800010430000000400200043d0000001f0430018f00000005033002720000150d0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000015050000413d000000000540004c0000151c0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba8000104300005000000000002000400000004001d000500000003001d000300000001001d000007370110009c000015880000213d000007730120009c000015880000813d000200000002001d0000073f010000410000000000100439000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000740011001c70000800b020000391ba61ba10000040f0000000102200190000015860000613d000000000101043b0000000a02000039000100000002001d000000000202041a000000e00220027000000000022100490000000405000029000007370150019700000005060000290000073703600197000006eb022001980000155b0000613d000000000430004c0000155b0000613d000000000410004c0000155b0000613d0000007004500210000007750440019700000000433400d900000000432300a90000000b04000039000000000504041a0000000003530019000000000034041b0000007003600210000007750330019700000000311300d900000000212100a90000000c02000039000000000302041a0000000001310019000000000012041b0000073f010000410000000000100439000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000740011001c70000800b020000391ba61ba10000040f0000000102200190000015860000613d0000000204000029000000700240021000000775022001970000000303000029000000000232019f000000000101043b000000e001100210000000000121019f0000000102000029000000000012041b000000400100043d000000200210003900000000004204350000000000310435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f00000741011001c70000800d02000039000000010300003900000776040000411ba61b9c0000040f0000000101200190000015860000613d000000000001042d000000000100001900001ba800010430000000400100043d00000044021000390000077403000041000000000032043500000024021000390000000803000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000073a011001c700001ba800010430000600000000000200000000050100190000000d01000039000000000801041a000000000180004c000017ac0000613d0000000701000039000000000301041a000000400b00043d000007770100004100000000001b04350000000001000414000006ef07300197000000040370008c000015ae0000c13d0000000103000031000000200130008c00000020040000390000000004034019000015e80000013d000300000005001d000400000002001d000500000008001d000006eb02000041000006eb0310009c0000000001028019000006eb03b0009c00000000020b40190000004002200210000000c001100210000000000121019f00000761011001c7000600000007001d000000000207001900020000000b001d1ba61ba10000040f000000020b00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000015d10000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000015c90000413d000000000750004c000015e00000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000000607000029000000050800002900000004020000290000000305000029000017bb0000613d0000001f01400039000000600110018f000000000ab1001900000000011a004b00000000010000190000000101004039000006f804a0009c000017b50000213d0000000101100190000017b50000c13d0000004000a0043f000000200130008c000017b30000413d00000000060b0433000007780160009c000017b30000813d000000000160004c000017ac0000613d0000073701500197000007370220019700000000211200aa00000000050000190000164b0000613d00000080021002700000075b0310009c000000000201a0190000075c030000410000075b0410009c000000010300a0390000002004300210000006f80520009c00000000030420190000004004200270000006f80520009c00000000020420190000001004300210000006eb0520009c00000000030420190000002004200270000006eb0520009c000000000204201900000008043002100000ffff0520008c0000000003042019000000100420027000000000020420190000000404300210000000ff0520008c00000000030420190000000804200270000000000204201900000002043002100000000f0520008c000000000304201900000004042002700000000002042019000000070220008c0000000002000019000000010200203900000000022301cf00000000432100d90000000002230019000000010320008c000017ad0000a13d000000010220027000000000432100d90000000002230019000000020320008c000017ad0000413d000000010220027000000000432100d90000000002230019000000020320008c000017ad0000413d000000010220027000000000432100d90000000002230019000000020320008c000017ad0000413d000000010220027000000000432100d90000000002230019000000020320008c000017ad0000413d000000010220027000000000432100d90000000002230019000000020320008c000017ad0000413d000000010220027000000000432100d90000000002230019000000020320008c000017ad0000413d000000010220027000000000312100d9000000000312004b0000000005010019000000000502401900000080018002700000075b0280009c000000000108a0190000075c020000410000075b0380009c000000010200a0390000002003200210000006f80410009c00000000020320190000004003100270000006f80410009c00000000010320190000001003200210000006eb0410009c00000000020320190000002003100270000006eb0410009c000000000103201900000008032002100000ffff0410008c0000000002032019000000100310027000000000010320190000000403200210000000ff0410008c00000000020320190000000803100270000000000103201900000002032002100000000f0410008c000000000203201900000004031002700000000001032019000000070110008c0000000001000019000000010100203900000000011201cf00000000321800d90000000001120019000000020210008c000017ad0000413d000000010110027000000000321800d90000000001120019000000020210008c000017ad0000413d000000010110027000000000321800d90000000001120019000000020210008c000017ad0000413d000000010110027000000000321800d90000000001120019000000020210008c000017ad0000413d000000010110027000000000321800d90000000001120019000000020210008c000017ad0000413d000000010110027000000000321800d90000000001120019000000020210008c000017ad0000413d000000010110027000000000321800d90000000001120019000000020210008c000017ad0000413d0000000202000039000500000002001d000000000902041a000007790200004100000000002a0435000000010110027000000000321800d9000000000321004b000000000802001900000000080140190000000001000414000000040270008c000600000006001d000016a50000c13d0000000103000031000000200130008c00000020040000390000000004034019000016de0000013d000100000008001d000200000009001d000300000005001d000006eb02000041000006eb0310009c0000000001028019000006eb03a0009c00000000020a40190000004002200210000000c001100210000000000121019f00000761011001c7000000000207001900040000000a001d1ba61ba10000040f000000040a00002900000000030100190000006003300270000006eb03300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000016c70000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000016bf0000413d000000000750004c000016d60000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000000606000029000000030500002900000002090000290000000108000029000017e10000613d0000001f01400039000000600110018f0000000001a10019000006f80210009c000017b50000213d000000400010043f000000200130008c000017b30000413d00000000020a0433000000ff0120008c000017b30000213d000000000185004b0000175b0000413d0000000001850049000000000390004c000016f20000613d000000010300008a00000000439300d9000000000313004b0000175b0000413d000000010220008a000000ff0320008c0000175b0000213d000000000320004c000016fb0000613d000000010300008a00000000432300d9000000000353004b0000175b0000413d00000000325200a9000000000282001a000017ad0000613d00000000319100a9000000000312004b000017ac0000213d00000000132100d90000000501000029000000000201041a0000000001320019000000000221004b0000000002000019000000010200403900000001022001900000175b0000c13d000400000003001d0000000502000029000000000012041b0000000000600435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000017b30000613d000000000101043b000000000301041a00000004040000290000000002430019000000000332004b0000000003000019000000010300403900000001033001900000175b0000c13d000000000021041b000000400100043d0000000000410435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f000006fe011001c70000800d0200003900000003030000390000075504000041000000000500001900000006060000291ba61b9c0000040f00000006030000290000000101200190000017b30000613d0000000501000029000000000101041a000400000001001d0000000a01000039000000000101041a000500000001001d0000000000300435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000017b30000613d00000005060000290000073702600197000000000101043b000000000101041a000000000310004c000017610000613d000000010300008a00000000341300d9000000000324004b00000004050000290000175b0000413d000000000350004c000017ad0000613d00000070036002700000073703300197000000000434004b000017660000813d000007020100004100000000001004350000001101000039000000040010043f000007030100004100001ba8000104300000000405000029000000000350004c000017ad0000613d00000070036002700000073703300197000000400600043d0000077a0460009c000017b50000213d0000006004600039000000400040043f00000000422100a900000000425200d90000073702200197000500000006001d000000000426043600000000211300a900000000215100d90000073701100197000400000004001d00000000001404350000073f010000410000000000100439000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000740011001c70000800b020000391ba61ba10000040f00000006030000290000000102200190000017b30000613d00000005020000290000004002200039000000000101043b000006eb01100197000300000002001d000000000012043500000000003004350000000f01000039000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000017b30000613d000000050200002900000000020204330000073702200197000000000101043b000000000301041a0000077b03300197000000000232019f000000000021041b000000000201041a0000077c022001970000000403000029000000000303043300000070033002100000077503300197000000000232019f000000000021041b00000003020000290000000002020433000000e002200210000000000301041a0000077d03300197000000000223019f000000000021041b000000000001042d000007020100004100000000001004350000001201000039000000040010043f000007030100004100001ba800010430000000000100001900001ba800010430000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba800010430000000400200043d0000001f0430018f0000000503300272000017c80000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000017c00000413d000000000540004c000017d70000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba800010430000000400200043d0000001f0430018f0000000503300272000017ee0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000017e60000413d000000000540004c000017fd0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000006eb010000410000000103000031000006eb0430009c0000000003018019000006eb0420009c000000000102401900000040011002100000006002300210000000000112019f00001ba8000104300005000000000002000500000003001d000300000002001d000100000001001d000006ef01100197000400000001001d0000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000018620000613d000000000101043b000000000201041a0000000501000029000200000002001d000000000112004b000018640000413d00000004010000290000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f00000001022001900000000504000029000018620000613d00000002020000290000000002420049000000000101043b000000000021041b0000000301000029000006ef01100197000200000001001d0000000000100435000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f00000005040000290000000102200190000018620000613d000000000101043b000000000301041a0000000002430019000000000332004b000000000300001900000001030040390000000103300190000018790000c13d000000000021041b000000400100043d0000000000410435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f000006fe011001c70000800d0200003900000003030000390000075504000041000000040500002900000002060000291ba61b9c0000040f0000000101200190000018620000613d0000000101000029000000030200002900000005030000291ba619070000040f000000000001042d000000000100001900001ba800010430000000400100043d00000064021000390000077e03000041000000000032043500000044021000390000077f03000041000000000032043500000024021000390000002603000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000074b011001c700001ba800010430000007020100004100000000001004350000001101000039000000040010043f000007030100004100001ba8000104300004000000000002000000000220004c000018f80000613d0000000202000039000000000302041a0000000a02000039000000000202041a000006ef01100198000018f80000613d000400000002001d000300000003001d000200000001001d0000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000018f90000613d00000004060000290000073702600197000000000101043b000000000101041a000000000310004c0000000305000029000018ae0000613d000000010300008a00000000341300d9000000000324004b000018a80000413d000000000350004c000018fb0000613d00000070036002700000073703300197000000000434004b000018b20000813d000007020100004100000000001004350000001101000039000000040010043f000007030100004100001ba800010430000000000350004c000018fb0000613d00000070036002700000073703300197000000400600043d000007720460009c000019010000813d0000006004600039000000400040043f00000000422100a900000000425200d90000073702200197000400000006001d000000000426043600000000213100a900000000215100d90000073701100197000300000004001d00000000001404350000073f010000410000000000100439000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000740011001c70000800b020000391ba61ba10000040f0000000102200190000018f90000613d00000004020000290000004002200039000000000101043b000006eb01100197000100000002001d0000000000120435000000020100002900000000001004350000000f01000039000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f0000000102200190000018f90000613d000000040200002900000000020204330000073702200197000000000101043b000000000301041a0000077b03300197000000000232019f000000000021041b000000000201041a0000077c022001970000000303000029000000000303043300000070033002100000077503300197000000000232019f000000000021041b00000001020000290000000002020433000000e002200210000000000301041a0000077d03300197000000000223019f000000000021041b000000000001042d000000000100001900001ba800010430000007020100004100000000001004350000001201000039000000040010043f000007030100004100001ba800010430000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba800010430000c0000000000020000000004020019000000000230004c000019ff0000613d0000000202000039000000000202041a000600000002001d0000000a02000039000000000202041a0000073703200197000800000003001d00000070022002700000073702200197000700000002001d000006ef01100198000019880000613d000300000004001d000400000001001d0000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f000000010220019000001a000000613d000000000101043b000000000101041a000000000210004c0000000605000029000019380000613d000000010200008a00000000231200d90000000802000029000000000223004b000019a90000413d000000000250004c00001a020000613d00000000020004150000000b0220008a00000020022000c90000000704000029000000000343004b0000193d0000813d000019a90000013d00000000020004150000000c0220008a00000020022000c9000000000350004c00001a020000613d000000070300002900000000433100a900000000435300d9000000200220011a000007370230019d0000073702300197000000400400043d000007720340009c00001a080000813d0000006003400039000000400030043f000000080300002900000000313100a900000000315100d90000073701100197000500000004001d0000000001140436000200000001001d00000000002104350000073f010000410000000000100439000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000740011001c70000800b020000391ba61ba10000040f000000010220019000001a000000613d00000005020000290000004002200039000000000101043b000006eb01100197000100000002001d0000000000120435000000040100002900000000001004350000000f01000039000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f000000010220019000001a000000613d000000050200002900000000020204330000073702200197000000000101043b000000000301041a0000077b03300197000000000232019f000000000021041b000000000201041a0000077c022001970000000203000029000000000303043300000070033002100000077503300197000000000232019f000000000021041b00000001020000290000000002020433000000e002200210000000000301041a0000077d03300197000000000223019f000000000021041b0000000304000029000006ef01400198000019ff0000613d000500000001001d0000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f000000010220019000001a000000613d000000000101043b000000000101041a000000000210004c000019af0000613d000000010200008a00000000231200d90000000802000029000000000223004b0000000605000029000019a90000413d000000000250004c00001a020000613d0000000002000415000000090220008a00000020022000c90000000704000029000000000343004b000019b50000813d000007020100004100000000001004350000001101000039000000040010043f000007030100004100001ba80001043000000000020004150000000a0220008a00000020022000c90000000605000029000000000350004c00001a020000613d000000070300002900000000433100a900000000435300d9000000200220011a000007370230019d0000073702300197000000400400043d0000077a0340009c00001a080000213d0000006003400039000000400030043f000000080300002900000000313100a900000000315100d90000073701100197000800000004001d0000000001140436000700000001001d00000000002104350000073f010000410000000000100439000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000740011001c70000800b020000391ba61ba10000040f000000010220019000001a000000613d00000008020000290000004002200039000000000101043b000006eb01100197000600000002001d0000000000120435000000050100002900000000001004350000000f01000039000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f000000010220019000001a000000613d000000080200002900000000020204330000073702200197000000000101043b000000000301041a0000077b03300197000000000232019f000000000021041b000000000201041a0000077c022001970000000703000029000000000303043300000070033002100000077503300197000000000232019f000000000021041b00000006020000290000000002020433000000e002200210000000000301041a0000077d03300197000000000223019f000000000021041b000000000001042d000000000100001900001ba800010430000007020100004100000000001004350000001201000039000000040010043f000007030100004100001ba800010430000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba800010430000400000000000200000000040200190000000202000039000200000002001d000000000302041a0000000002430019000000000332004b00000000030000190000000103004039000000010330019000001a720000c13d0000000203000029000000000023041b000006ef01100197000400000001001d0000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c70000801002000039000300000004001d1ba61ba10000040f000000010220019000001ac30000613d000000000101043b000000000301041a00000003040000290000000002430019000000000332004b00000000030000190000000103004039000000010330019000001a720000c13d000000000021041b000000400100043d0000000000410435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f000006fe011001c70000800d0200003900000003030000390000075504000041000000000500001900000004060000291ba61b9c0000040f000000010120019000001ac30000613d0000000301000029000000000110004c00001ac20000613d0000000201000029000000000201041a0000000a01000039000000000301041a0000000401000029000000000110004c00001ac20000613d000300000003001d000200000002001d00000004010000290000000000100435000000200000043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f000000010220019000001ac30000613d00000003060000290000073702600197000000000101043b000000000101041a000000000310004c000000020500002900001a780000613d000000010300008a00000000341300d9000000000324004b00001a720000413d000000000350004c00001ac50000613d00000070036002700000073703300197000000000434004b00001a7c0000813d000007020100004100000000001004350000001101000039000000040010043f000007030100004100001ba800010430000000000350004c00001ac50000613d00000070036002700000073703300197000000400600043d000007720460009c00001acb0000813d0000006004600039000000400040043f00000000422100a900000000425200d90000073702200197000300000006001d000000000426043600000000211300a900000000215100d90000073701100197000200000004001d00000000001404350000073f010000410000000000100439000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000740011001c70000800b020000391ba61ba10000040f000000010220019000001ac30000613d00000003020000290000004002200039000000000101043b000006eb01100197000100000002001d0000000000120435000000040100002900000000001004350000000f01000039000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f000000010220019000001ac30000613d000000030200002900000000020204330000073702200197000000000101043b000000000301041a0000077b03300197000000000232019f000000000021041b000000000201041a0000077c022001970000000203000029000000000303043300000070033002100000077503300197000000000232019f000000000021041b00000001020000290000000002020433000000e002200210000000000301041a0000077d03300197000000000223019f000000000021041b000000000001042d000000000100001900001ba800010430000007020100004100000000001004350000001201000039000000040010043f000007030100004100001ba800010430000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba8000104300003000000000002000100000003001d000300000002001d000006ef01100197000200000001001d00000000001004350000000101000039000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f000000010220019000001b0b0000613d000000000101043b0000000302000029000006ef02200197000300000002001d0000000000200435000000200010043f000006eb010000410000000002000414000006eb0320009c0000000001024019000000c00110021000000741011001c700008010020000391ba61ba10000040f000000010220019000001b0b0000613d000000000101043b0000000102000029000000000021041b000000400100043d0000000000210435000006eb020000410000000003000414000006eb0430009c0000000003028019000006eb0410009c00000000010280190000004001100210000000c002300210000000000112019f000006fe011001c70000800d0200003900000003030000390000076404000041000000020500002900000003060000291ba61b9c0000040f000000010120019000001b0b0000613d000000000001042d000000000100001900001ba8000104300000000004010019000000400100043d00000044051000390000000000350435000000200310003900000780050000410000000000530435000006ef022001970000002405100039000000000025043500000044020000390000000000210435000007810210009c00001b7f0000813d0000008002100039000000400020043f0000000002000414000000040540008c00001b230000c13d0000000102000039000000010300003100001b370000013d000006eb05000041000006eb0630009c000000000305801900000040033002100000000001010433000006eb0610009c00000000010580190000006001100210000000000131019f000006eb0320009c0000000002058019000000c002200210000000000121019f00000000020400191ba61b9c0000040f000000010220018f00030000000103550000006001100270000106eb0010019d000006eb031001970000006001000039000000000430004c00001b650000613d0000003f01300039000000200400008a000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000006f80640009c00001b7f0000213d000000010550019000001b7f0000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f000000050660027200001b560000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b00001b4e0000413d000000000750004c00001b650000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000000220004c00001b850000613d0000000012010434000000000320004c00001b7e0000613d000006ee030000410000001f0420008c00000000040000190000000004032019000006ee02200197000000000520004c0000000003008019000006ee0220009c00000000020400190000000002036019000000000220004c00001b9a0000613d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b00001b9a0000c13d000000000110004c00001b850000613d000000000001042d000007020100004100000000001004350000004101000039000000040010043f000007030100004100001ba800010430000000400100043d00000064021000390000078203000041000000000032043500000044021000390000078303000041000000000032043500000024021000390000002d03000039000000000032043500000739020000410000000000210435000000040210003900000020030000390000000000320435000006eb02000041000006eb0310009c000000000102801900000040011002100000074b011001c700001ba800010430000000000100001900001ba80001043000001b9f002104210000000102000039000000000001042d0000000002000019000000000001042d00001ba4002104230000000102000039000000000001042d0000000002000019000000000001042d00001ba60000043200001ba70001042e00001ba80001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000009f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66511e36e5d2f401c54acf6e396173073db572b463aec87cff7b0e9eb32c669528b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f000000000000000000000000000000000000000000000000ffffffffffffff3f0200000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000095d89b4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffdf5a462000000000000000000000000000000000000000000000000000000000002f00000000000000000000000000000000000000000000000000000000000000204c5020546f6b656e0000000000000000000000000000000000000000000000205a464c5000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000000000000000005a46204c5020546f6b656e0000000000000000000000000000000000000000005a464c500000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000800000010000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000200000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006a62784100000000000000000000000000000000000000000000000000000000bc25cf7600000000000000000000000000000000000000000000000000000000d505acce00000000000000000000000000000000000000000000000000000000e5ba6dac00000000000000000000000000000000000000000000000000000000e5ba6dad00000000000000000000000000000000000000000000000000000000e6262b5600000000000000000000000000000000000000000000000000000000fff6cae900000000000000000000000000000000000000000000000000000000d505accf00000000000000000000000000000000000000000000000000000000dd62ed3e00000000000000000000000000000000000000000000000000000000d21220a600000000000000000000000000000000000000000000000000000000d21220a700000000000000000000000000000000000000000000000000000000d4cadf6800000000000000000000000000000000000000000000000000000000bc25cf7700000000000000000000000000000000000000000000000000000000c45a0155000000000000000000000000000000000000000000000000000000007ecebdff0000000000000000000000000000000000000000000000000000000095d89b400000000000000000000000000000000000000000000000000000000095d89b4100000000000000000000000000000000000000000000000000000000a457c2d700000000000000000000000000000000000000000000000000000000a9059cbb000000000000000000000000000000000000000000000000000000007ecebe000000000000000000000000000000000000000000000000000000000089afcb44000000000000000000000000000000000000000000000000000000007464fc3c000000000000000000000000000000000000000000000000000000007464fc3d000000000000000000000000000000000000000000000000000000007abdd2d1000000000000000000000000000000000000000000000000000000006a6278420000000000000000000000000000000000000000000000000000000070a0823100000000000000000000000000000000000000000000000000000000313ce5660000000000000000000000000000000000000000000000000000000051415b5c000000000000000000000000000000000000000000000000000000005a3d5492000000000000000000000000000000000000000000000000000000005a3d54930000000000000000000000000000000000000000000000000000000065193e910000000000000000000000000000000000000000000000000000000065d176f50000000000000000000000000000000000000000000000000000000051415b5d000000000000000000000000000000000000000000000000000000005909c0d500000000000000000000000000000000000000000000000000000000395093500000000000000000000000000000000000000000000000000000000039509351000000000000000000000000000000000000000000000000000000004a1c830900000000000000000000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000003644e515000000000000000000000000000000000000000000000000000000000dfe16800000000000000000000000000000000000000000000000000000000023b872dc0000000000000000000000000000000000000000000000000000000023b872dd0000000000000000000000000000000000000000000000000000000030adf81f000000000000000000000000000000000000000000000000000000000dfe16810000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000000902f1ab000000000000000000000000000000000000000000000000000000000902f1ac00000000000000000000000000000000000000000000000000000000095ea7b300000000000000000000000000000000000000000000000000000000022c0d9f0000000000000000000000000000000000000000000000000000000006fdde03000000000000000000000000000000000000ffffffffffffffffffffffffffff464f5242494444454e000000000000000000000000000000000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000494e56414c49445f464545000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d95539132020000020000000000000000000000000000000400000000000000000000000002000000000000000000000000000000000000400000000000000000000000006e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9000000000000000000000000000000000000000000000000ffffffffffffff1f1901000000000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0200000200000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a045434453413a20696e76616c6964207369676e6174757265202776272076616c7565000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000000000000000000000045434453413a20696e76616c6964207369676e6174757265202773272076616c0000000000000000000000000000000000000080000000000000000000000000494e56414c49445f5349474e415455524500000000000000000000000000000045434453413a20696e76616c6964207369676e617475726500000000000000004558504952454400000000000000000000000000000000000000000000000000207a65726f00000000000000000000000000000000000000000000000000000045524332303a2064656372656173656420616c6c6f77616e63652062656c6f778a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b70a0823100000000000000000000000000000000000000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364960000000000000000000000000000000000000040000000000000000000000000636500000000000000000000000000000000000000000000000000000000000045524332303a206275726e20616d6f756e7420657863656564732062616c616e494e53554646494349454e545f4c49515549444954595f4255524e454400000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000100000000000000004c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f494e53554646494349454e545f4c49515549444954595f4d494e54454400000000068db8bac710cb295e9e1b089a027525460aa64c2f837b4a2339c0ebedfa4354cf2aeb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000200000000000000000000000000000000000080000000000000000000000000d78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8228c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92545524332303a20696e73756666696369656e7420616c6c6f77616e6365000000c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b494e53554646494349454e545f4f55545055545f414d4f554e54000000000000494e53554646494349454e545f4c4951554944495459000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000010d1e85c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff5b00000000000000000000000000000000000000a4000000000000000000000000494e53554646494349454e545f494e5055545f414d4f554e54000000000000000000000000000000000000000000000000000000000000000000000005f5e1004b000000000000000000000000000000000000000000000000000000000000005265656e7472616e637947756172643a207265656e7472616e742063616c6c00000000000000000000000000000000000000000000000000ffffffffffffffa000000000000000000000000000000000000100000000000000000000000000004f564552464c4f5700000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffff00000000000000000000000000001c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1017e7e5800000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000011e3bdde00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9fffffffffffffffffffffffffffffffffffff0000000000000000000000000000ffffffff0000000000000000000000000000ffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff616c616e6365000000000000000000000000000000000000000000000000000045524332303a207472616e7366657220616d6f756e7420657863656564732062a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff80616e73666572206661696c6564000000000000000000000000000000000000005472616e7366657248656c7065723a3a736166655472616e736665723a2074722f326488aab04d2af0ebae3dce6e42cd8b49544e0b423ce85ae768939b0d83b1
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0x0000000000000000000000003355df6d4c9c3035724fd0e3914de96a5a83aaf40000000000000000000000005aea5775959fbc2557cc8789bc1bf90a239d9a91
-----Decoded View---------------
Arg [0] : _token0 (address): 0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4
Arg [1] : _token1 (address): 0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91
-----Encoded View---------------
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.