Overview
AVAX Balance
AVAX Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 959 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Timelock | 8843376 | 1211 days ago | IN | 0 AVAX | 0.00068032 | ||||
Set Strategy | 8199576 | 1226 days ago | IN | 0 AVAX | 0.01079966 | ||||
Approve Strategy | 8199568 | 1226 days ago | IN | 0 AVAX | 0.00235209 | ||||
Set Strategy | 7987821 | 1231 days ago | IN | 0 AVAX | 0.00124142 | ||||
Approve Strategy | 7987819 | 1231 days ago | IN | 0 AVAX | 0.00117762 | ||||
Set Globe | 7987813 | 1231 days ago | IN | 0 AVAX | 0.00118125 | ||||
Set Strategy | 7643739 | 1239 days ago | IN | 0 AVAX | 0.00124235 | ||||
Approve Strategy | 7643733 | 1239 days ago | IN | 0 AVAX | 0.00118477 | ||||
Set Globe | 7643727 | 1239 days ago | IN | 0 AVAX | 0.00119262 | ||||
Set Globe | 7467721 | 1243 days ago | IN | 0 AVAX | 0.00230678 | ||||
Set Strategy | 7467573 | 1243 days ago | IN | 0 AVAX | 0.00242988 | ||||
Approve Strategy | 7467564 | 1243 days ago | IN | 0 AVAX | 0.0022651 | ||||
Set Strategy | 7466935 | 1243 days ago | IN | 0 AVAX | 0.00316902 | ||||
Approve Strategy | 7466930 | 1243 days ago | IN | 0 AVAX | 0.00302122 | ||||
Set Globe | 7466921 | 1243 days ago | IN | 0 AVAX | 0.00292422 | ||||
Set Strategy | 7465752 | 1243 days ago | IN | 0 AVAX | 0.01656559 | ||||
Approve Strategy | 7465655 | 1243 days ago | IN | 0 AVAX | 0.00531426 | ||||
Set Strategy | 7462227 | 1243 days ago | IN | 0 AVAX | 0.09115489 | ||||
Set Strategy | 7436060 | 1244 days ago | IN | 0 AVAX | 0.00332643 | ||||
Approve Strategy | 7436048 | 1244 days ago | IN | 0 AVAX | 0.00117762 | ||||
Set Strategy | 7435087 | 1244 days ago | IN | 0 AVAX | 0.00870849 | ||||
Approve Strategy | 7435061 | 1244 days ago | IN | 0 AVAX | 0.00119236 | ||||
Set Globe | 7392760 | 1245 days ago | IN | 0 AVAX | 0.00131246 | ||||
Set Globe | 7392462 | 1245 days ago | IN | 0 AVAX | 0.00149996 | ||||
Set Strategy | 7389986 | 1245 days ago | IN | 0 AVAX | 0.00189366 |
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:
ControllerV4
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2021-11-03 */ // File: contracts/interfaces/controller.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface IController { function globes(address) external view returns (address); function rewards() external view returns (address); function devfund() external view returns (address); function treasury() external view returns (address); function balanceOf(address) external view returns (uint256); function withdraw(address, uint256) external; function earn(address, uint256) external; } // File: contracts/lib/safe-math.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: contracts/lib/context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: contracts/lib/erc20.sol // File: contracts/GSN/Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; // File: contracts/token/ERC20/IERC20.sol /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, 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); } // File: contracts/utils/Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: contracts/token/ERC20/ERC20.sol /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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 {_setupDecimals} is * called. * * 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() public view returns (uint8) { return _decimals; } /** * @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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); 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 virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(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 virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, 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 * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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 virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 virtual { 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 Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @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 to 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 { } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/interfaces/globe.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface IGlobe is IERC20 { function token() external view returns (address); function claimInsurance() external; // NOTE: Only yDelegatedVault implements this function getRatio() external view returns (uint256); function depositAll() external; function deposit(uint256) external; function withdrawAll() external; function withdraw(uint256) external; function earn() external; function decimals() external view returns (uint8); } // File: contracts/interfaces/globe-converter.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface IGlobeConverter { function convert( address _refundExcess, // address to send the excess amount when adding liquidity uint256 _amount, // UNI LP Amount bytes calldata _data ) external returns (uint256); } // File: contracts/interfaces/onesplit.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface OneSplitAudit { function getExpectedReturn( address fromToken, address toToken, uint256 amount, uint256 parts, uint256 featureFlags ) external view returns (uint256 returnAmount, uint256[] memory distribution); function swap( address fromToken, address toToken, uint256 amount, uint256 minReturn, uint256[] calldata distribution, uint256 featureFlags ) external payable; } // File: contracts/interfaces/strategy.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface IStrategy { function rewards() external view returns (address); function gauge() external view returns (address); function want() external view returns (address); function timelock() external view returns (address); function deposit() external; function withdrawForSwap(uint256) external returns (uint256); function withdraw(address) external; function withdraw(uint256) external; function skim() external; function withdrawAll() external returns (uint256); function balanceOf() external view returns (uint256); function harvest() external; function setTimelock(address) external; function setController(address _controller) external; function execute(address _target, bytes calldata _data) external payable returns (bytes memory response); function execute(bytes calldata _data) external payable returns (bytes memory response); } // File: contracts/interfaces/converter.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface Converter { function convert(address) external returns (uint256); } // File: contracts/controller-v4.sol // https://github.com/iearn-finance/globes/blob/master/contracts/controllers/StrategyControllerV1.sol pragma solidity ^0.6.7; pragma experimental ABIEncoderV2; contract ControllerV4 { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; address public constant burn = 0x000000000000000000000000000000000000dEaD; address public onesplit = 0xC586BeF4a0992C495Cf22e1aeEE4E446CECDee0E; address public governance; address public strategist; address public devfund; address public treasury; address public timelock; // Convenience fee 0.1% uint256 public convenienceFee = 100; uint256 public constant convenienceFeeMax = 100000; mapping(address => address) public globes; // takes lp address and returns associated globe mapping(address => address) public strategies; // takes lp and returns associated strategy mapping(address => mapping(address => address)) public converters; mapping(address => mapping(address => bool)) public approvedStrategies; mapping(address => bool) public approvedGlobeConverters; uint256 public split = 500; uint256 public constant max = 10000; constructor( address _governance, address _strategist, address _timelock, address _devfund, address _treasury ) public { governance = _governance; strategist = _strategist; timelock = _timelock; devfund = _devfund; treasury = _treasury; } function setDevFund(address _devfund) public { require(msg.sender == governance, "!governance"); devfund = _devfund; } function setTreasury(address _treasury) public { require(msg.sender == governance, "!governance"); treasury = _treasury; } function setStrategist(address _strategist) public { require(msg.sender == governance, "!governance"); strategist = _strategist; } function setSplit(uint256 _split) public { require(msg.sender == governance, "!governance"); require(_split <= max, "numerator cannot be greater than denominator"); split = _split; } function setOneSplit(address _onesplit) public { require(msg.sender == governance, "!governance"); onesplit = _onesplit; } function setGovernance(address _governance) public { require(msg.sender == governance, "!governance"); governance = _governance; } function setTimelock(address _timelock) public { require(msg.sender == timelock, "!timelock"); timelock = _timelock; } function setGlobe(address _token, address _globe) public { require( msg.sender == strategist || msg.sender == governance, "!strategist" ); require(globes[_token] == address(0), "globe"); globes[_token] = _globe; } function approveGlobeConverter(address _converter) public { require(msg.sender == governance, "!governance"); approvedGlobeConverters[_converter] = true; } function revokeGlobeConverter(address _converter) public { require(msg.sender == governance, "!governance"); approvedGlobeConverters[_converter] = false; } function approveStrategy(address _token, address _strategy) public { require(msg.sender == timelock, "!timelock"); approvedStrategies[_token][_strategy] = true; } function revokeStrategy(address _token, address _strategy) public { require(msg.sender == governance, "!governance"); require(strategies[_token] != _strategy, "cannot revoke active strategy"); approvedStrategies[_token][_strategy] = false; } function setConvenienceFee(uint256 _convenienceFee) external { require(msg.sender == timelock, "!timelock"); convenienceFee = _convenienceFee; } function setStrategy(address _token, address _strategy) public { require( msg.sender == strategist || msg.sender == governance, "!strategist" ); require(approvedStrategies[_token][_strategy] == true, "!approved"); address _current = strategies[_token]; if (_current != address(0)) { IStrategy(_current).withdrawAll(); } strategies[_token] = _strategy; } function earn(address _token, uint256 _amount) public { address _strategy = strategies[_token]; address _want = IStrategy(_strategy).want(); if (_want != _token) { address converter = converters[_token][_want]; IERC20(_token).safeTransfer(converter, _amount); _amount = Converter(converter).convert(_strategy); IERC20(_want).safeTransfer(_strategy, _amount); } else { IERC20(_token).safeTransfer(_strategy, _amount); } IStrategy(_strategy).deposit(); } function balanceOf(address _token) external view returns (uint256) { return IStrategy(strategies[_token]).balanceOf(); } function withdrawAll(address _token) public { require( msg.sender == strategist || msg.sender == governance, "!strategist" ); IStrategy(strategies[_token]).withdrawAll(); } function inCaseTokensGetStuck(address _token, uint256 _amount) public { require( msg.sender == strategist || msg.sender == governance, "!governance" ); IERC20(_token).safeTransfer(msg.sender, _amount); } function inCaseStrategyTokenGetStuck(address _strategy, address _token) public { require( msg.sender == strategist || msg.sender == governance, "!governance" ); IStrategy(_strategy).withdraw(_token); } function getExpectedReturn( address _strategy, address _token, uint256 parts ) public view returns (uint256 expected) { uint256 _balance = IERC20(_token).balanceOf(_strategy); address _want = IStrategy(_strategy).want(); (expected, ) = OneSplitAudit(onesplit).getExpectedReturn( _token, _want, _balance, parts, 0 ); } // Only allows to withdraw non-core strategy tokens ~ this is over and above normal yield function yearn( address _strategy, address _token, uint256 parts ) public { require( msg.sender == strategist || msg.sender == governance, "!governance" ); // This contract should never have value in it, but just incase since this is a public call uint256 _before = IERC20(_token).balanceOf(address(this)); IStrategy(_strategy).withdraw(_token); uint256 _after = IERC20(_token).balanceOf(address(this)); if (_after > _before) { uint256 _amount = _after.sub(_before); address _want = IStrategy(_strategy).want(); uint256[] memory _distribution; uint256 _expected; _before = IERC20(_want).balanceOf(address(this)); IERC20(_token).safeApprove(onesplit, 0); IERC20(_token).safeApprove(onesplit, _amount); (_expected, _distribution) = OneSplitAudit(onesplit) .getExpectedReturn(_token, _want, _amount, parts, 0); OneSplitAudit(onesplit).swap( _token, _want, _amount, _expected, _distribution, 0 ); _after = IERC20(_want).balanceOf(address(this)); if (_after > _before) { _amount = _after.sub(_before); uint256 _treasury = _amount.mul(split).div(max); earn(_want, _amount.sub(_treasury)); IERC20(_want).safeTransfer(treasury, _treasury); } } } function withdraw(address _token, uint256 _amount) public { require(msg.sender == globes[_token], "!globe"); IStrategy(strategies[_token]).withdraw(_amount); } // Function to swap between globes function swapExactGlobeForGlobe( address _fromGlobe, // From which Globe address _toGlobe, // To which Globe uint256 _fromGlobeAmount, // How much globe tokens to swap uint256 _toGlobeMinAmount, // How much globe tokens you'd like at a minimum address payable[] calldata _targets, bytes[] calldata _data ) external returns (uint256) { require(_targets.length == _data.length, "!length"); // Only return last response for (uint256 i = 0; i < _targets.length; i++) { require(_targets[i] != address(0), "!converter"); require(approvedGlobeConverters[_targets[i]], "!converter"); } address _fromGlobeToken = IGlobe(_fromGlobe).token(); address _toGlobeToken = IGlobe(_toGlobe).token(); // Get pTokens from msg.sender IERC20(_fromGlobe).safeTransferFrom( msg.sender, address(this), _fromGlobeAmount ); // Calculate how much underlying // is the amount of pTokens worth uint256 _fromGlobeUnderlyingAmount = _fromGlobeAmount .mul(IGlobe(_fromGlobe).getRatio()) .div(10**uint256(IGlobe(_fromGlobe).decimals())); // Call 'withdrawForSwap' on Globe's current strategy if Globe // doesn't have enough initial capital. // This has moves the funds from the strategy to the Globe's // 'earnable' amount. Enabling 'free' withdrawals uint256 _fromGlobeAvailUnderlying = IERC20(_fromGlobeToken).balanceOf( _fromGlobe ); if (_fromGlobeAvailUnderlying < _fromGlobeUnderlyingAmount) { IStrategy(strategies[_fromGlobeToken]).withdrawForSwap( _fromGlobeUnderlyingAmount.sub(_fromGlobeAvailUnderlying) ); } // Withdraw from Globe // Note: this is free since its still within the "earnable" amount // as we transferred the access IERC20(_fromGlobe).safeApprove(_fromGlobe, 0); IERC20(_fromGlobe).safeApprove(_fromGlobe, _fromGlobeAmount); IGlobe(_fromGlobe).withdraw(_fromGlobeAmount); // Calculate fee uint256 _fromUnderlyingBalance = IERC20(_fromGlobeToken).balanceOf( address(this) ); uint256 _convenienceFee = _fromUnderlyingBalance.mul(convenienceFee).div( convenienceFeeMax ); if (_convenienceFee > 1) { IERC20(_fromGlobeToken).safeTransfer(devfund, _convenienceFee.div(2)); IERC20(_fromGlobeToken).safeTransfer(treasury, _convenienceFee.div(2)); } // Executes sequence of logic for (uint256 i = 0; i < _targets.length; i++) { _execute(_targets[i], _data[i]); } // Deposit into new Globe uint256 _toBal = IERC20(_toGlobeToken).balanceOf(address(this)); IERC20(_toGlobeToken).safeApprove(_toGlobe, 0); IERC20(_toGlobeToken).safeApprove(_toGlobe, _toBal); IGlobe(_toGlobe).deposit(_toBal); // Send Globe Tokens to user uint256 _toGlobeBal = IGlobe(_toGlobe).balanceOf(address(this)); if (_toGlobeBal < _toGlobeMinAmount) { revert("!min-globe-amount"); } IGlobe(_toGlobe).transfer(msg.sender, _toGlobeBal); return _toGlobeBal; } function _execute(address _target, bytes memory _data) internal returns (bytes memory response) { require(_target != address(0), "!target"); // call contract in current context assembly { let succeeded := delegatecall( sub(gas(), 5000), _target, add(_data, 0x20), mload(_data), 0, 0 ) let size := returndatasize() response := mload(0x40) mstore( 0x40, add(response, and(add(add(size, 0x20), 0x1f), not(0x1f))) ) mstore(response, size) returndatacopy(add(response, 0x20), 0, size) switch iszero(succeeded) case 1 { // throw if delegatecall failed revert(add(response, 0x20), size) } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_strategist","type":"address"},{"internalType":"address","name":"_timelock","type":"address"},{"internalType":"address","name":"_devfund","type":"address"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_converter","type":"address"}],"name":"approveGlobeConverter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_strategy","type":"address"}],"name":"approveStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedGlobeConverters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"approvedStrategies","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convenienceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"convenienceFeeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"converters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devfund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"earn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"parts","type":"uint256"}],"name":"getExpectedReturn","outputs":[{"internalType":"uint256","name":"expected","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"globes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"inCaseStrategyTokenGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"inCaseTokensGetStuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"max","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onesplit","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_converter","type":"address"}],"name":"revokeGlobeConverter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_strategy","type":"address"}],"name":"revokeStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_convenienceFee","type":"uint256"}],"name":"setConvenienceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devfund","type":"address"}],"name":"setDevFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_globe","type":"address"}],"name":"setGlobe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_onesplit","type":"address"}],"name":"setOneSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_split","type":"uint256"}],"name":"setSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_strategy","type":"address"}],"name":"setStrategy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"split","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"strategies","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_fromGlobe","type":"address"},{"internalType":"address","name":"_toGlobe","type":"address"},{"internalType":"uint256","name":"_fromGlobeAmount","type":"uint256"},{"internalType":"uint256","name":"_toGlobeMinAmount","type":"uint256"},{"internalType":"address payable[]","name":"_targets","type":"address[]"},{"internalType":"bytes[]","name":"_data","type":"bytes[]"}],"name":"swapExactGlobeForGlobe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategy","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"parts","type":"uint256"}],"name":"yearn","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405273c586bef4a0992c495cf22e1aeee4e446cecdee0e6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060646006556101f4600c553480156200007057600080fd5b5060405162005310380380620053108339818101604052810190620000969190620001fd565b84600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050620002cd565b600081519050620001f781620002b3565b92915050565b600080600080600060a086880312156200021657600080fd5b60006200022688828901620001e6565b95505060206200023988828901620001e6565b94505060406200024c88828901620001e6565b93505060606200025f88828901620001e6565b92505060806200027288828901620001e6565b9150509295509295909350565b60006200028c8262000293565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620002be816200027f565b8114620002ca57600080fd5b50565b61503380620002dd6000396000f3fe608060405234801561001057600080fd5b506004361061023c5760003560e01c80638d8f1e671161013b578063c7b9d530116100b8578063f712adbb1161007c578063f712adbb146106a9578063f7654176146106c7578063f89c44a7146106e5578063fa09e63014610701578063fbe8b5ce1461071d5761023c565b8063c7b9d53014610607578063d33219b414610623578063e4f2494d14610641578063f0f4426014610671578063f3fef3a31461068d5761023c565b8063ae4db919116100ff578063ae4db9191461057b578063b02bf4b914610597578063bdacb303146105b3578063c494448e146105cf578063c6d758cb146105eb5761023c565b80638d8f1e67146104d75780638da1df4d146104f55780639bcdff1f14610511578063a1578b6a1461052f578063ab033ea91461055f5761023c565b80635aa6e675116101c95780636dcd64e51161018d5780636dcd64e5146103fb5780636f8bec301461042b57806370a082311461045b57806372cb5d971461048b57806383c9a30b146104a75761023c565b80635aa6e6751461035557806361d027b314610373578063674e694f146103915780636ac5db19146103ad5780636d1b4bde146103cb5761023c565b80631fe4a686116102105780631fe4a686146102b157806330ed9dff146102cf57806339ebf823146102eb57806344df8e701461031b578063590bbb60146103395761023c565b8062b267531461024157806304209f481461025d578063197baa6d146102795780631dfd45af14610295575b600080fd5b61025b600480360381019061025691906140ba565b61073b565b005b61027760048036038101906102729190614171565b610826565b005b610293600480360381019061028e9190614135565b610eff565b005b6102af60048036038101906102aa91906142e8565b611056565b005b6102b96110f0565b6040516102c691906149a0565b60405180910390f35b6102e960048036038101906102e49190614135565b611116565b005b610305600480360381019061030091906140ba565b61134e565b60405161031291906149a0565b60405180910390f35b610323611381565b60405161033091906149a0565b60405180910390f35b610353600480360381019061034e9190614135565b611387565b005b61035d61157e565b60405161036a91906149a0565b60405180910390f35b61037b6115a4565b60405161038891906149a0565b60405180910390f35b6103ab60048036038101906103a691906142e8565b6115ca565b005b6103b56116a9565b6040516103c29190614d65565b60405180910390f35b6103e560048036038101906103e091906140ba565b6116af565b6040516103f291906149a0565b60405180910390f35b61041560048036038101906104109190614171565b6116e2565b6040516104229190614d65565b60405180910390f35b610445600480360381019061044091906140ba565b6118b8565b6040516104529190614b28565b60405180910390f35b610475600480360381019061047091906140ba565b6118d8565b6040516104829190614d65565b60405180910390f35b6104a560048036038101906104a09190614135565b6119be565b005b6104c160048036038101906104bc91906141c0565b611d13565b6040516104ce9190614d65565b60405180910390f35b6104df61285a565b6040516104ec91906149a0565b60405180910390f35b61050f600480360381019061050a91906140ba565b612880565b005b610519612953565b6040516105269190614d65565b60405180910390f35b61054960048036038101906105449190614135565b61295a565b6040516105569190614b28565b60405180910390f35b610579600480360381019061057491906140ba565b612989565b005b610595600480360381019061059091906140ba565b612a5d565b005b6105b160048036038101906105ac9190614283565b612b31565b005b6105cd60048036038101906105c891906140ba565b612e66565b005b6105e960048036038101906105e49190614135565b612f3a565b005b61060560048036038101906106009190614283565b613063565b005b610621600480360381019061061c91906140ba565b61317a565b005b61062b61324e565b60405161063891906149a0565b60405180910390f35b61065b60048036038101906106569190614135565b613274565b60405161066891906149a0565b60405180910390f35b61068b600480360381019061068691906140ba565b6132b6565b005b6106a760048036038101906106a29190614283565b61338a565b005b6106b1613525565b6040516106be91906149a0565b60405180910390f35b6106cf61354a565b6040516106dc9190614d65565b60405180910390f35b6106ff60048036038101906106fa91906140ba565b613550565b005b61071b600480360381019061071691906140ba565b61363b565b005b610725613806565b6040516107329190614d65565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c290614ba5565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108cf5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090590614ba5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161094991906149a0565b60206040518083038186803b15801561096157600080fd5b505afa158015610975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109999190614311565b90508373ffffffffffffffffffffffffffffffffffffffff166351cff8d9846040518263ffffffff1660e01b81526004016109d491906149a0565b600060405180830381600087803b1580156109ee57600080fd5b505af1158015610a02573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a4191906149a0565b60206040518083038186803b158015610a5957600080fd5b505afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190614311565b905081811115610ef8576000610ab0838361380c90919063ffffffff16565b905060008673ffffffffffffffffffffffffffffffffffffffff16631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b158015610afa57600080fd5b505afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3291906140e3565b9050606060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b7191906149a0565b60206040518083038186803b158015610b8957600080fd5b505afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190614311565b9550610c106000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008a73ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b610c5c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858a73ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663085e2c5b8985878b60006040518663ffffffff1660e01b8152600401610cbf959493929190614aac565b60006040518083038186803b158015610cd757600080fd5b505afa158015610ceb573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d14919061433a565b80935081925050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a7515e898587858760006040518763ffffffff1660e01b8152600401610d8196959493929190614a44565b600060405180830381600087803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610dec91906149a0565b60206040518083038186803b158015610e0457600080fd5b505afa158015610e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3c9190614311565b945085851115610ef357610e59868661380c90919063ffffffff16565b93506000610e86612710610e78600c54886139b490919063ffffffff16565b613a2490919063ffffffff16565b9050610ea484610e9f838861380c90919063ffffffff16565b612b31565b610ef1600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828673ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b505b505050505b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fa85750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90614ba5565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b815260040161102091906149a0565b600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90614d25565b60405180910390fd5b8060068190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111bf5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590614b85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390614c45565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e90614ba5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90614b65565b60405180910390fd5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165190614ba5565b60405180910390fd5b61271081111561169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690614be5565b60405180910390fd5b80600c8190555050565b61271081565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808373ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040161171e91906149a0565b60206040518083038186803b15801561173657600080fd5b505afa15801561174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190614311565b905060008573ffffffffffffffffffffffffffffffffffffffff16631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b1580156117b857600080fd5b505afa1580156117cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f091906140e3565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663085e2c5b8683858860006040518663ffffffff1660e01b8152600401611855959493929190614aac565b60006040518083038186803b15801561186d57600080fd5b505afa158015611881573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906118aa919061433a565b508093505050509392505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663722713f76040518163ffffffff1660e01b815260040160206040518083038186803b15801561197f57600080fd5b505afa158015611993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b79190614311565b9050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a675750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90614b85565b60405180910390fd5b60011515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90614c25565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c90578073ffffffffffffffffffffffffffffffffffffffff1663853828b66040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611c5657600080fd5b505af1158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e9190614311565b505b81600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000828290508585905014611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5490614d05565b60405180910390fd5b60008090505b85859050811015611eb757600073ffffffffffffffffffffffffffffffffffffffff16868683818110611d9257fe5b9050602002016020810190611da7919061410c565b73ffffffffffffffffffffffffffffffffffffffff161415611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614c05565b60405180910390fd5b600b6000878784818110611e0e57fe5b9050602002016020810190611e23919061410c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea190614c05565b60405180910390fd5b8080600101915050611d63565b5060008973ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f0057600080fd5b505afa158015611f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3891906140e3565b905060008973ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8257600080fd5b505afa158015611f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fba91906140e3565b9050611fe933308b8e73ffffffffffffffffffffffffffffffffffffffff16613af4909392919063ffffffff16565b60006121108c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561203457600080fd5b505afa158015612048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206c919061438e565b60ff16600a0a6121028e73ffffffffffffffffffffffffffffffffffffffff1663ec1ebd7a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120bb57600080fd5b505afa1580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190614311565b8d6139b490919063ffffffff16565b613a2490919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff1660e01b815260040161214d91906149a0565b60206040518083038186803b15801561216557600080fd5b505afa158015612179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219d9190614311565b9050818110156122a557600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c6223e26612235838561380c90919063ffffffff16565b6040518263ffffffff1660e01b81526004016122519190614d65565b602060405180830381600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a39190614311565b505b6122d18d60008f73ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b6122fc8d8c8f73ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b8c73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d8c6040518263ffffffff1660e01b81526004016123359190614d65565b600060405180830381600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b5050505060008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123a291906149a0565b60206040518083038186803b1580156123ba57600080fd5b505afa1580156123ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f29190614311565b90506000612420620186a0612412600654856139b490919063ffffffff16565b613a2490919063ffffffff16565b905060018111156124ec5761248b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612465600284613a2490919063ffffffff16565b8873ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b6124eb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166124c5600284613a2490919063ffffffff16565b8873ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b5b60008090505b8b8b9050811015612595576125878c8c8381811061250c57fe5b9050602002016020810190612521919061410c565b8b8b8481811061252d57fe5b905060200281019061253f9190614d80565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613b7d565b5080806001019150506124f2565b5060008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125d191906149a0565b60206040518083038186803b1580156125e957600080fd5b505afa1580156125fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126219190614311565b905061264f8f60008873ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b61267a8f828873ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b8e73ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b81526004016126b39190614d65565b600060405180830381600087803b1580156126cd57600080fd5b505af11580156126e1573d6000803e3d6000fd5b5050505060008f73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161272091906149a0565b60206040518083038186803b15801561273857600080fd5b505afa15801561274c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127709190614311565b90508d8110156127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac90614ca5565b60405180910390fd5b8f73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016127f09291906149bb565b602060405180830381600087803b15801561280a57600080fd5b505af115801561281e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284291906142bf565b50809850505050505050505098975050505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290790614ba5565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620186a081565b600a6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1090614ba5565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae490614ba5565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b158015612bdd57600080fd5b505afa158015612bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1591906140e3565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612dd4576000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612d1681858773ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff1663def2489b846040518263ffffffff1660e01b8152600401612d4f91906149a0565b602060405180830381600087803b158015612d6957600080fd5b505af1158015612d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da19190614311565b9350612dce83858473ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b50612e00565b612dff82848673ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b5b8173ffffffffffffffffffffffffffffffffffffffff1663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e4857600080fd5b505af1158015612e5c573d6000803e3d6000fd5b5050505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed90614d25565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190614d25565b60405180910390fd5b6001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061310c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61314b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314290614ba5565b60405180910390fd5b61317633828473ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461320a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320190614ba5565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90614ba5565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344e90614c85565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016134ef9190614d65565b600060405180830381600087803b15801561350957600080fd5b505af115801561351d573d6000803e3d6000fd5b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d790614ba5565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136e45750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371a90614b85565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663853828b66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156137ca57600080fd5b505af11580156137de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138029190614311565b5050565b60065481565b600061384e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c3f565b905092915050565b60008114806138ef575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161389d9291906149e4565b60206040518083038186803b1580156138b557600080fd5b505afa1580156138c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ed9190614311565b145b61392e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392590614d45565b60405180910390fd5b6139af8363095ea7b360e01b848460405160240161394d929190614aff565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c9a565b505050565b6000808314156139c75760009050613a1e565b60008284029050828482816139d857fe5b0414613a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1090614c65565b60405180910390fd5b809150505b92915050565b6000613a6683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d61565b905092915050565b613aef8363a9059cbb60e01b8484604051602401613a8d929190614aff565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c9a565b505050565b613b77846323b872dd60e01b858585604051602401613b1593929190614a0d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c9a565b50505050565b6060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613be690614bc5565b60405180910390fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e811560018114613c2f57613c36565b8160208501fd5b50505092915050565b6000838311158290613c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7e9190614b43565b60405180910390fd5b5060008385039050809150509392505050565b6060613cfc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613dc29092919063ffffffff16565b9050600081511115613d5c5780806020019051810190613d1c91906142bf565b613d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d5290614ce5565b60405180910390fd5b5b505050565b60008083118290613da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d9f9190614b43565b60405180910390fd5b506000838581613db457fe5b049050809150509392505050565b6060613dd18484600085613dda565b90509392505050565b6060613de585613efd565b613e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1b90614cc5565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051613e4e9190614989565b60006040518083038185875af1925050503d8060008114613e8b576040519150601f19603f3d011682016040523d82523d6000602084013e613e90565b606091505b50915091508115613ea5578092505050613ef5565b600081511115613eb85780518082602001fd5b836040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eec9190614b43565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b600081359050613f1f81614f8a565b92915050565b600081519050613f3481614f8a565b92915050565b600081359050613f4981614fa1565b92915050565b60008083601f840112613f6157600080fd5b8235905067ffffffffffffffff811115613f7a57600080fd5b602083019150836020820283011115613f9257600080fd5b9250929050565b60008083601f840112613fab57600080fd5b8235905067ffffffffffffffff811115613fc457600080fd5b602083019150836020820283011115613fdc57600080fd5b9250929050565b600082601f830112613ff457600080fd5b815161400761400282614e04565b614dd7565b9150818183526020840193506020810190508385602084028201111561402c57600080fd5b60005b8381101561405c57816140428882614090565b84526020840193506020830192505060018101905061402f565b5050505092915050565b60008151905061407581614fb8565b92915050565b60008135905061408a81614fcf565b92915050565b60008151905061409f81614fcf565b92915050565b6000815190506140b481614fe6565b92915050565b6000602082840312156140cc57600080fd5b60006140da84828501613f10565b91505092915050565b6000602082840312156140f557600080fd5b600061410384828501613f25565b91505092915050565b60006020828403121561411e57600080fd5b600061412c84828501613f3a565b91505092915050565b6000806040838503121561414857600080fd5b600061415685828601613f10565b925050602061416785828601613f10565b9150509250929050565b60008060006060848603121561418657600080fd5b600061419486828701613f10565b93505060206141a586828701613f10565b92505060406141b68682870161407b565b9150509250925092565b60008060008060008060008060c0898b0312156141dc57600080fd5b60006141ea8b828c01613f10565b98505060206141fb8b828c01613f10565b975050604061420c8b828c0161407b565b965050606061421d8b828c0161407b565b955050608089013567ffffffffffffffff81111561423a57600080fd5b6142468b828c01613f4f565b945094505060a089013567ffffffffffffffff81111561426557600080fd5b6142718b828c01613f99565b92509250509295985092959890939650565b6000806040838503121561429657600080fd5b60006142a485828601613f10565b92505060206142b58582860161407b565b9150509250929050565b6000602082840312156142d157600080fd5b60006142df84828501614066565b91505092915050565b6000602082840312156142fa57600080fd5b60006143088482850161407b565b91505092915050565b60006020828403121561432357600080fd5b600061433184828501614090565b91505092915050565b6000806040838503121561434d57600080fd5b600061435b85828601614090565b925050602083015167ffffffffffffffff81111561437857600080fd5b61438485828601613fe3565b9150509250929050565b6000602082840312156143a057600080fd5b60006143ae848285016140a5565b91505092915050565b60006143c3838361496b565b60208301905092915050565b6143d881614efe565b82525050565b6143e781614e97565b82525050565b60006143f882614e3c565b6144028185614e6a565b935061440d83614e2c565b8060005b8381101561443e57815161442588826143b7565b975061443083614e5d565b925050600181019050614411565b5085935050505092915050565b61445481614ebb565b82525050565b600061446582614e47565b61446f8185614e7b565b935061447f818560208601614f46565b80840191505092915050565b61449481614f10565b82525050565b60006144a582614e52565b6144af8185614e86565b93506144bf818560208601614f46565b6144c881614f79565b840191505092915050565b60006144e0601d83614e86565b91507f63616e6e6f74207265766f6b65206163746976652073747261746567790000006000830152602082019050919050565b6000614520600b83614e86565b91507f21737472617465676973740000000000000000000000000000000000000000006000830152602082019050919050565b6000614560600b83614e86565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b60006145a0600783614e86565b91507f21746172676574000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006145e0602c83614e86565b91507f6e756d657261746f722063616e6e6f742062652067726561746572207468616e60008301527f2064656e6f6d696e61746f7200000000000000000000000000000000000000006020830152604082019050919050565b6000614646600a83614e86565b91507f21636f6e766572746572000000000000000000000000000000000000000000006000830152602082019050919050565b6000614686600983614e86565b91507f21617070726f76656400000000000000000000000000000000000000000000006000830152602082019050919050565b60006146c6600583614e86565b91507f676c6f62650000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614706602183614e86565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061476c600683614e86565b91507f21676c6f626500000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006147ac601183614e86565b91507f216d696e2d676c6f62652d616d6f756e740000000000000000000000000000006000830152602082019050919050565b60006147ec601d83614e86565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b600061482c602a83614e86565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614892600783614e86565b91507f216c656e677468000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006148d2600983614e86565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6000614912603683614e86565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b61497481614ee7565b82525050565b61498381614ee7565b82525050565b6000614995828461445a565b915081905092915050565b60006020820190506149b560008301846143de565b92915050565b60006040820190506149d060008301856143cf565b6149dd602083018461497a565b9392505050565b60006040820190506149f960008301856143de565b614a0660208301846143de565b9392505050565b6000606082019050614a2260008301866143de565b614a2f60208301856143de565b614a3c604083018461497a565b949350505050565b600060c082019050614a5960008301896143de565b614a6660208301886143de565b614a73604083018761497a565b614a80606083018661497a565b8181036080830152614a9281856143ed565b9050614aa160a083018461448b565b979650505050505050565b600060a082019050614ac160008301886143de565b614ace60208301876143de565b614adb604083018661497a565b614ae8606083018561497a565b614af5608083018461448b565b9695505050505050565b6000604082019050614b1460008301856143de565b614b21602083018461497a565b9392505050565b6000602082019050614b3d600083018461444b565b92915050565b60006020820190508181036000830152614b5d818461449a565b905092915050565b60006020820190508181036000830152614b7e816144d3565b9050919050565b60006020820190508181036000830152614b9e81614513565b9050919050565b60006020820190508181036000830152614bbe81614553565b9050919050565b60006020820190508181036000830152614bde81614593565b9050919050565b60006020820190508181036000830152614bfe816145d3565b9050919050565b60006020820190508181036000830152614c1e81614639565b9050919050565b60006020820190508181036000830152614c3e81614679565b9050919050565b60006020820190508181036000830152614c5e816146b9565b9050919050565b60006020820190508181036000830152614c7e816146f9565b9050919050565b60006020820190508181036000830152614c9e8161475f565b9050919050565b60006020820190508181036000830152614cbe8161479f565b9050919050565b60006020820190508181036000830152614cde816147df565b9050919050565b60006020820190508181036000830152614cfe8161481f565b9050919050565b60006020820190508181036000830152614d1e81614885565b9050919050565b60006020820190508181036000830152614d3e816148c5565b9050919050565b60006020820190508181036000830152614d5e81614905565b9050919050565b6000602082019050614d7a600083018461497a565b92915050565b60008083356001602003843603038112614d9957600080fd5b80840192508235915067ffffffffffffffff821115614db757600080fd5b602083019250600182023603831315614dcf57600080fd5b509250929050565b6000604051905081810181811067ffffffffffffffff82111715614dfa57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e1b57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614ea282614ec7565b9050919050565b6000614eb482614ec7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614f0982614f22565b9050919050565b6000614f1b82614ee7565b9050919050565b6000614f2d82614f34565b9050919050565b6000614f3f82614ec7565b9050919050565b60005b83811015614f64578082015181840152602081019050614f49565b83811115614f73576000848401525b50505050565b6000601f19601f8301169050919050565b614f9381614e97565b8114614f9e57600080fd5b50565b614faa81614ea9565b8114614fb557600080fd5b50565b614fc181614ebb565b8114614fcc57600080fd5b50565b614fd881614ee7565b8114614fe357600080fd5b50565b614fef81614ef1565b8114614ffa57600080fd5b5056fea2646970667358221220fe9f676bd03e812203a72752018742ffe3290ed891145ddf6304f4d3a83d35cb64736f6c63430006070033000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a20000000000000000000000005df42ace37ba4aceb1f3465aad9bbacaa238d652
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061023c5760003560e01c80638d8f1e671161013b578063c7b9d530116100b8578063f712adbb1161007c578063f712adbb146106a9578063f7654176146106c7578063f89c44a7146106e5578063fa09e63014610701578063fbe8b5ce1461071d5761023c565b8063c7b9d53014610607578063d33219b414610623578063e4f2494d14610641578063f0f4426014610671578063f3fef3a31461068d5761023c565b8063ae4db919116100ff578063ae4db9191461057b578063b02bf4b914610597578063bdacb303146105b3578063c494448e146105cf578063c6d758cb146105eb5761023c565b80638d8f1e67146104d75780638da1df4d146104f55780639bcdff1f14610511578063a1578b6a1461052f578063ab033ea91461055f5761023c565b80635aa6e675116101c95780636dcd64e51161018d5780636dcd64e5146103fb5780636f8bec301461042b57806370a082311461045b57806372cb5d971461048b57806383c9a30b146104a75761023c565b80635aa6e6751461035557806361d027b314610373578063674e694f146103915780636ac5db19146103ad5780636d1b4bde146103cb5761023c565b80631fe4a686116102105780631fe4a686146102b157806330ed9dff146102cf57806339ebf823146102eb57806344df8e701461031b578063590bbb60146103395761023c565b8062b267531461024157806304209f481461025d578063197baa6d146102795780631dfd45af14610295575b600080fd5b61025b600480360381019061025691906140ba565b61073b565b005b61027760048036038101906102729190614171565b610826565b005b610293600480360381019061028e9190614135565b610eff565b005b6102af60048036038101906102aa91906142e8565b611056565b005b6102b96110f0565b6040516102c691906149a0565b60405180910390f35b6102e960048036038101906102e49190614135565b611116565b005b610305600480360381019061030091906140ba565b61134e565b60405161031291906149a0565b60405180910390f35b610323611381565b60405161033091906149a0565b60405180910390f35b610353600480360381019061034e9190614135565b611387565b005b61035d61157e565b60405161036a91906149a0565b60405180910390f35b61037b6115a4565b60405161038891906149a0565b60405180910390f35b6103ab60048036038101906103a691906142e8565b6115ca565b005b6103b56116a9565b6040516103c29190614d65565b60405180910390f35b6103e560048036038101906103e091906140ba565b6116af565b6040516103f291906149a0565b60405180910390f35b61041560048036038101906104109190614171565b6116e2565b6040516104229190614d65565b60405180910390f35b610445600480360381019061044091906140ba565b6118b8565b6040516104529190614b28565b60405180910390f35b610475600480360381019061047091906140ba565b6118d8565b6040516104829190614d65565b60405180910390f35b6104a560048036038101906104a09190614135565b6119be565b005b6104c160048036038101906104bc91906141c0565b611d13565b6040516104ce9190614d65565b60405180910390f35b6104df61285a565b6040516104ec91906149a0565b60405180910390f35b61050f600480360381019061050a91906140ba565b612880565b005b610519612953565b6040516105269190614d65565b60405180910390f35b61054960048036038101906105449190614135565b61295a565b6040516105569190614b28565b60405180910390f35b610579600480360381019061057491906140ba565b612989565b005b610595600480360381019061059091906140ba565b612a5d565b005b6105b160048036038101906105ac9190614283565b612b31565b005b6105cd60048036038101906105c891906140ba565b612e66565b005b6105e960048036038101906105e49190614135565b612f3a565b005b61060560048036038101906106009190614283565b613063565b005b610621600480360381019061061c91906140ba565b61317a565b005b61062b61324e565b60405161063891906149a0565b60405180910390f35b61065b60048036038101906106569190614135565b613274565b60405161066891906149a0565b60405180910390f35b61068b600480360381019061068691906140ba565b6132b6565b005b6106a760048036038101906106a29190614283565b61338a565b005b6106b1613525565b6040516106be91906149a0565b60405180910390f35b6106cf61354a565b6040516106dc9190614d65565b60405180910390f35b6106ff60048036038101906106fa91906140ba565b613550565b005b61071b600480360381019061071691906140ba565b61363b565b005b610725613806565b6040516107329190614d65565b60405180910390f35b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c290614ba5565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108cf5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61090e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090590614ba5565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161094991906149a0565b60206040518083038186803b15801561096157600080fd5b505afa158015610975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109999190614311565b90508373ffffffffffffffffffffffffffffffffffffffff166351cff8d9846040518263ffffffff1660e01b81526004016109d491906149a0565b600060405180830381600087803b1580156109ee57600080fd5b505af1158015610a02573d6000803e3d6000fd5b5050505060008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a4191906149a0565b60206040518083038186803b158015610a5957600080fd5b505afa158015610a6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a919190614311565b905081811115610ef8576000610ab0838361380c90919063ffffffff16565b905060008673ffffffffffffffffffffffffffffffffffffffff16631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b158015610afa57600080fd5b505afa158015610b0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3291906140e3565b9050606060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b7191906149a0565b60206040518083038186803b158015610b8957600080fd5b505afa158015610b9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc19190614311565b9550610c106000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008a73ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b610c5c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858a73ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663085e2c5b8985878b60006040518663ffffffff1660e01b8152600401610cbf959493929190614aac565b60006040518083038186803b158015610cd757600080fd5b505afa158015610ceb573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d14919061433a565b80935081925050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e2a7515e898587858760006040518763ffffffff1660e01b8152600401610d8196959493929190614a44565b600060405180830381600087803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610dec91906149a0565b60206040518083038186803b158015610e0457600080fd5b505afa158015610e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3c9190614311565b945085851115610ef357610e59868661380c90919063ffffffff16565b93506000610e86612710610e78600c54886139b490919063ffffffff16565b613a2490919063ffffffff16565b9050610ea484610e9f838861380c90919063ffffffff16565b612b31565b610ef1600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828673ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b505b505050505b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fa85750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610fe7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fde90614ba5565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166351cff8d9826040518263ffffffff1660e01b815260040161102091906149a0565b600060405180830381600087803b15801561103a57600080fd5b505af115801561104e573d6000803e3d6000fd5b505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90614d25565b60405180910390fd5b8060068190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111bf5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f590614b85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c390614c45565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e90614ba5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc90614b65565b60405180910390fd5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165190614ba5565b60405180910390fd5b61271081111561169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690614be5565b60405180910390fd5b80600c8190555050565b61271081565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808373ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040161171e91906149a0565b60206040518083038186803b15801561173657600080fd5b505afa15801561174a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176e9190614311565b905060008573ffffffffffffffffffffffffffffffffffffffff16631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b1580156117b857600080fd5b505afa1580156117cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f091906140e3565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663085e2c5b8683858860006040518663ffffffff1660e01b8152600401611855959493929190614aac565b60006040518083038186803b15801561186d57600080fd5b505afa158015611881573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906118aa919061433a565b508093505050509392505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663722713f76040518163ffffffff1660e01b815260040160206040518083038186803b15801561197f57600080fd5b505afa158015611993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b79190614311565b9050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611a675750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90614b85565b60405180910390fd5b60011515600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90614c25565b60405180910390fd5b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611c90578073ffffffffffffffffffffffffffffffffffffffff1663853828b66040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611c5657600080fd5b505af1158015611c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8e9190614311565b505b81600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000828290508585905014611d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5490614d05565b60405180910390fd5b60008090505b85859050811015611eb757600073ffffffffffffffffffffffffffffffffffffffff16868683818110611d9257fe5b9050602002016020810190611da7919061410c565b73ffffffffffffffffffffffffffffffffffffffff161415611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614c05565b60405180910390fd5b600b6000878784818110611e0e57fe5b9050602002016020810190611e23919061410c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea190614c05565b60405180910390fd5b8080600101915050611d63565b5060008973ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f0057600080fd5b505afa158015611f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3891906140e3565b905060008973ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8257600080fd5b505afa158015611f96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fba91906140e3565b9050611fe933308b8e73ffffffffffffffffffffffffffffffffffffffff16613af4909392919063ffffffff16565b60006121108c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561203457600080fd5b505afa158015612048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206c919061438e565b60ff16600a0a6121028e73ffffffffffffffffffffffffffffffffffffffff1663ec1ebd7a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156120bb57600080fd5b505afa1580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190614311565b8d6139b490919063ffffffff16565b613a2490919063ffffffff16565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a082318e6040518263ffffffff1660e01b815260040161214d91906149a0565b60206040518083038186803b15801561216557600080fd5b505afa158015612179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219d9190614311565b9050818110156122a557600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c6223e26612235838561380c90919063ffffffff16565b6040518263ffffffff1660e01b81526004016122519190614d65565b602060405180830381600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a39190614311565b505b6122d18d60008f73ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b6122fc8d8c8f73ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b8c73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d8c6040518263ffffffff1660e01b81526004016123359190614d65565b600060405180830381600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b5050505060008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016123a291906149a0565b60206040518083038186803b1580156123ba57600080fd5b505afa1580156123ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f29190614311565b90506000612420620186a0612412600654856139b490919063ffffffff16565b613a2490919063ffffffff16565b905060018111156124ec5761248b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612465600284613a2490919063ffffffff16565b8873ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b6124eb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166124c5600284613a2490919063ffffffff16565b8873ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b5b60008090505b8b8b9050811015612595576125878c8c8381811061250c57fe5b9050602002016020810190612521919061410c565b8b8b8481811061252d57fe5b905060200281019061253f9190614d80565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613b7d565b5080806001019150506124f2565b5060008573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125d191906149a0565b60206040518083038186803b1580156125e957600080fd5b505afa1580156125fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126219190614311565b905061264f8f60008873ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b61267a8f828873ffffffffffffffffffffffffffffffffffffffff166138569092919063ffffffff16565b8e73ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b81526004016126b39190614d65565b600060405180830381600087803b1580156126cd57600080fd5b505af11580156126e1573d6000803e3d6000fd5b5050505060008f73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161272091906149a0565b60206040518083038186803b15801561273857600080fd5b505afa15801561274c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127709190614311565b90508d8110156127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac90614ca5565b60405180910390fd5b8f73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016127f09291906149bb565b602060405180830381600087803b15801561280a57600080fd5b505af115801561281e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284291906142bf565b50809850505050505050505098975050505050505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290790614ba5565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620186a081565b600a6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1090614ba5565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae490614ba5565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16631f1fcd516040518163ffffffff1660e01b815260040160206040518083038186803b158015612bdd57600080fd5b505afa158015612bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1591906140e3565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612dd4576000600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612d1681858773ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff1663def2489b846040518263ffffffff1660e01b8152600401612d4f91906149a0565b602060405180830381600087803b158015612d6957600080fd5b505af1158015612d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612da19190614311565b9350612dce83858473ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b50612e00565b612dff82848673ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b5b8173ffffffffffffffffffffffffffffffffffffffff1663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e4857600080fd5b505af1158015612e5c573d6000803e3d6000fd5b5050505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed90614d25565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190614d25565b60405180910390fd5b6001600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061310c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61314b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314290614ba5565b60405180910390fd5b61317633828473ffffffffffffffffffffffffffffffffffffffff16613a6e9092919063ffffffff16565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461320a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320190614ba5565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90614ba5565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344e90614c85565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016134ef9190614d65565b600060405180830381600087803b15801561350957600080fd5b505af115801561351d573d6000803e3d6000fd5b505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135d790614ba5565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806136e45750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b613723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371a90614b85565b60405180910390fd5b600860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663853828b66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156137ca57600080fd5b505af11580156137de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138029190614311565b5050565b60065481565b600061384e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c3f565b905092915050565b60008114806138ef575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b815260040161389d9291906149e4565b60206040518083038186803b1580156138b557600080fd5b505afa1580156138c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ed9190614311565b145b61392e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392590614d45565b60405180910390fd5b6139af8363095ea7b360e01b848460405160240161394d929190614aff565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c9a565b505050565b6000808314156139c75760009050613a1e565b60008284029050828482816139d857fe5b0414613a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1090614c65565b60405180910390fd5b809150505b92915050565b6000613a6683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613d61565b905092915050565b613aef8363a9059cbb60e01b8484604051602401613a8d929190614aff565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c9a565b505050565b613b77846323b872dd60e01b858585604051602401613b1593929190614a0d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613c9a565b50505050565b6060600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613be690614bc5565b60405180910390fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e811560018114613c2f57613c36565b8160208501fd5b50505092915050565b6000838311158290613c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c7e9190614b43565b60405180910390fd5b5060008385039050809150509392505050565b6060613cfc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613dc29092919063ffffffff16565b9050600081511115613d5c5780806020019051810190613d1c91906142bf565b613d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d5290614ce5565b60405180910390fd5b5b505050565b60008083118290613da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d9f9190614b43565b60405180910390fd5b506000838581613db457fe5b049050809150509392505050565b6060613dd18484600085613dda565b90509392505050565b6060613de585613efd565b613e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1b90614cc5565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051613e4e9190614989565b60006040518083038185875af1925050503d8060008114613e8b576040519150601f19603f3d011682016040523d82523d6000602084013e613e90565b606091505b50915091508115613ea5578092505050613ef5565b600081511115613eb85780518082602001fd5b836040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eec9190614b43565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b600081359050613f1f81614f8a565b92915050565b600081519050613f3481614f8a565b92915050565b600081359050613f4981614fa1565b92915050565b60008083601f840112613f6157600080fd5b8235905067ffffffffffffffff811115613f7a57600080fd5b602083019150836020820283011115613f9257600080fd5b9250929050565b60008083601f840112613fab57600080fd5b8235905067ffffffffffffffff811115613fc457600080fd5b602083019150836020820283011115613fdc57600080fd5b9250929050565b600082601f830112613ff457600080fd5b815161400761400282614e04565b614dd7565b9150818183526020840193506020810190508385602084028201111561402c57600080fd5b60005b8381101561405c57816140428882614090565b84526020840193506020830192505060018101905061402f565b5050505092915050565b60008151905061407581614fb8565b92915050565b60008135905061408a81614fcf565b92915050565b60008151905061409f81614fcf565b92915050565b6000815190506140b481614fe6565b92915050565b6000602082840312156140cc57600080fd5b60006140da84828501613f10565b91505092915050565b6000602082840312156140f557600080fd5b600061410384828501613f25565b91505092915050565b60006020828403121561411e57600080fd5b600061412c84828501613f3a565b91505092915050565b6000806040838503121561414857600080fd5b600061415685828601613f10565b925050602061416785828601613f10565b9150509250929050565b60008060006060848603121561418657600080fd5b600061419486828701613f10565b93505060206141a586828701613f10565b92505060406141b68682870161407b565b9150509250925092565b60008060008060008060008060c0898b0312156141dc57600080fd5b60006141ea8b828c01613f10565b98505060206141fb8b828c01613f10565b975050604061420c8b828c0161407b565b965050606061421d8b828c0161407b565b955050608089013567ffffffffffffffff81111561423a57600080fd5b6142468b828c01613f4f565b945094505060a089013567ffffffffffffffff81111561426557600080fd5b6142718b828c01613f99565b92509250509295985092959890939650565b6000806040838503121561429657600080fd5b60006142a485828601613f10565b92505060206142b58582860161407b565b9150509250929050565b6000602082840312156142d157600080fd5b60006142df84828501614066565b91505092915050565b6000602082840312156142fa57600080fd5b60006143088482850161407b565b91505092915050565b60006020828403121561432357600080fd5b600061433184828501614090565b91505092915050565b6000806040838503121561434d57600080fd5b600061435b85828601614090565b925050602083015167ffffffffffffffff81111561437857600080fd5b61438485828601613fe3565b9150509250929050565b6000602082840312156143a057600080fd5b60006143ae848285016140a5565b91505092915050565b60006143c3838361496b565b60208301905092915050565b6143d881614efe565b82525050565b6143e781614e97565b82525050565b60006143f882614e3c565b6144028185614e6a565b935061440d83614e2c565b8060005b8381101561443e57815161442588826143b7565b975061443083614e5d565b925050600181019050614411565b5085935050505092915050565b61445481614ebb565b82525050565b600061446582614e47565b61446f8185614e7b565b935061447f818560208601614f46565b80840191505092915050565b61449481614f10565b82525050565b60006144a582614e52565b6144af8185614e86565b93506144bf818560208601614f46565b6144c881614f79565b840191505092915050565b60006144e0601d83614e86565b91507f63616e6e6f74207265766f6b65206163746976652073747261746567790000006000830152602082019050919050565b6000614520600b83614e86565b91507f21737472617465676973740000000000000000000000000000000000000000006000830152602082019050919050565b6000614560600b83614e86565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b60006145a0600783614e86565b91507f21746172676574000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006145e0602c83614e86565b91507f6e756d657261746f722063616e6e6f742062652067726561746572207468616e60008301527f2064656e6f6d696e61746f7200000000000000000000000000000000000000006020830152604082019050919050565b6000614646600a83614e86565b91507f21636f6e766572746572000000000000000000000000000000000000000000006000830152602082019050919050565b6000614686600983614e86565b91507f21617070726f76656400000000000000000000000000000000000000000000006000830152602082019050919050565b60006146c6600583614e86565b91507f676c6f62650000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614706602183614e86565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061476c600683614e86565b91507f21676c6f626500000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006147ac601183614e86565b91507f216d696e2d676c6f62652d616d6f756e740000000000000000000000000000006000830152602082019050919050565b60006147ec601d83614e86565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b600061482c602a83614e86565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614892600783614e86565b91507f216c656e677468000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006148d2600983614e86565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6000614912603683614e86565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b61497481614ee7565b82525050565b61498381614ee7565b82525050565b6000614995828461445a565b915081905092915050565b60006020820190506149b560008301846143de565b92915050565b60006040820190506149d060008301856143cf565b6149dd602083018461497a565b9392505050565b60006040820190506149f960008301856143de565b614a0660208301846143de565b9392505050565b6000606082019050614a2260008301866143de565b614a2f60208301856143de565b614a3c604083018461497a565b949350505050565b600060c082019050614a5960008301896143de565b614a6660208301886143de565b614a73604083018761497a565b614a80606083018661497a565b8181036080830152614a9281856143ed565b9050614aa160a083018461448b565b979650505050505050565b600060a082019050614ac160008301886143de565b614ace60208301876143de565b614adb604083018661497a565b614ae8606083018561497a565b614af5608083018461448b565b9695505050505050565b6000604082019050614b1460008301856143de565b614b21602083018461497a565b9392505050565b6000602082019050614b3d600083018461444b565b92915050565b60006020820190508181036000830152614b5d818461449a565b905092915050565b60006020820190508181036000830152614b7e816144d3565b9050919050565b60006020820190508181036000830152614b9e81614513565b9050919050565b60006020820190508181036000830152614bbe81614553565b9050919050565b60006020820190508181036000830152614bde81614593565b9050919050565b60006020820190508181036000830152614bfe816145d3565b9050919050565b60006020820190508181036000830152614c1e81614639565b9050919050565b60006020820190508181036000830152614c3e81614679565b9050919050565b60006020820190508181036000830152614c5e816146b9565b9050919050565b60006020820190508181036000830152614c7e816146f9565b9050919050565b60006020820190508181036000830152614c9e8161475f565b9050919050565b60006020820190508181036000830152614cbe8161479f565b9050919050565b60006020820190508181036000830152614cde816147df565b9050919050565b60006020820190508181036000830152614cfe8161481f565b9050919050565b60006020820190508181036000830152614d1e81614885565b9050919050565b60006020820190508181036000830152614d3e816148c5565b9050919050565b60006020820190508181036000830152614d5e81614905565b9050919050565b6000602082019050614d7a600083018461497a565b92915050565b60008083356001602003843603038112614d9957600080fd5b80840192508235915067ffffffffffffffff821115614db757600080fd5b602083019250600182023603831315614dcf57600080fd5b509250929050565b6000604051905081810181811067ffffffffffffffff82111715614dfa57600080fd5b8060405250919050565b600067ffffffffffffffff821115614e1b57600080fd5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614ea282614ec7565b9050919050565b6000614eb482614ec7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614f0982614f22565b9050919050565b6000614f1b82614ee7565b9050919050565b6000614f2d82614f34565b9050919050565b6000614f3f82614ec7565b9050919050565b60005b83811015614f64578082015181840152602081019050614f49565b83811115614f73576000848401525b50505050565b6000601f19601f8301169050919050565b614f9381614e97565b8114614f9e57600080fd5b50565b614faa81614ea9565b8114614fb557600080fd5b50565b614fc181614ebb565b8114614fcc57600080fd5b50565b614fd881614ee7565b8114614fe357600080fd5b50565b614fef81614ef1565b8114614ffa57600080fd5b5056fea2646970667358221220fe9f676bd03e812203a72752018742ffe3290ed891145ddf6304f4d3a83d35cb64736f6c63430006070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a20000000000000000000000005df42ace37ba4aceb1f3465aad9bbacaa238d652
-----Decoded View---------------
Arg [0] : _governance (address): 0xc9a51fB9057380494262fd291aED74317332C0a2
Arg [1] : _strategist (address): 0xc9a51fB9057380494262fd291aED74317332C0a2
Arg [2] : _timelock (address): 0xc9a51fB9057380494262fd291aED74317332C0a2
Arg [3] : _devfund (address): 0xc9a51fB9057380494262fd291aED74317332C0a2
Arg [4] : _treasury (address): 0x5df42ace37bA4AceB1f3465Aad9bbAcaA238D652
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2
Arg [1] : 000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2
Arg [2] : 000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2
Arg [3] : 000000000000000000000000c9a51fb9057380494262fd291aed74317332c0a2
Arg [4] : 0000000000000000000000005df42ace37ba4aceb1f3465aad9bbacaa238d652
Deployed Bytecode Sourcemap
33582:12711:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33582:12711:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;36604:178:0;;;;;;;;;;;;;;;;:::i;:::-;;39981:1628;;;;;;;;;;;;;;;;:::i;:::-;;39142:273;;;;;;;;;;;;;;;;:::i;:::-;;37264:167;;;;;;;;;;;;;;;;:::i;:::-;;33900:25;;;:::i;:::-;;;;;;;;;;;;;;;;36130:280;;;;;;;;;;;;;;;;:::i;:::-;;34250:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33711:73;;;:::i;:::-;;;;;;;;;;;;;;;;36983:273;;;;;;;;;;;;;;;;:::i;:::-;;33868:25;;;:::i;:::-;;;;;;;;;;;;;;;;33961:23;;;:::i;:::-;;;;;;;;;;;;;;;;35445:214;;;;;;;;;;;;;;;;:::i;:::-;;34592:35;;;:::i;:::-;;;;;;;;;;;;;;;;34153:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;39423:455;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34495:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38493:134;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;37439:462;;;;;;;;;;;;;;;;:::i;:::-;;41847:3451;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;33932:22;;;:::i;:::-;;;;;;;;;;;;;;;;35667:145;;;;;;;;;;;;;;;;:::i;:::-;;34094:50;;;:::i;:::-;;;;;;;;;;;;;;;;34418:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;35820:153;;;;;;;;;;;;;;;;:::i;:::-;;34982:141;;;;;;;;;;;;;;;;:::i;:::-;;37909:576;;;;;;;;;;;;;;;;:::i;:::-;;35981:141;;;;;;;;;;;;;;;;:::i;:::-;;36790:185;;;;;;;;;;;;;;;;:::i;:::-;;38873:261;;;;;;;;;;;;;;;;:::i;:::-;;35284:153;;;;;;;;;;;;;;;;:::i;:::-;;33991:23;;;:::i;:::-;;;;;;;;;;;;;;;;34346:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;35131:145;;;;;;;;;;;;;;;;:::i;:::-;;41617:182;;;;;;;;;;;;;;;;:::i;:::-;;33791:68;;;:::i;:::-;;;;;;;;;;;;;;;;34559:26;;;:::i;:::-;;;;;;;;;;;;;;;;36418:178;;;;;;;;;;;;;;;;:::i;:::-;;38635:230;;;;;;;;;;;;;;;;:::i;:::-;;34052:35;;;:::i;:::-;;;;;;;;;;;;;;;;36604:178;36694:10;;;;;;;;;;;36680:24;;:10;:24;;;36672:48;;;;;;;;;;;;;;;;;;;;;;36769:5;36731:23;:35;36755:10;36731:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;36604:178;:::o;39981:1628::-;40134:10;;;;;;;;;;;40120:24;;:10;:24;;;:52;;;;40162:10;;;;;;;;;;;40148:24;;:10;:24;;;40120:52;40098:113;;;;;;;;;;;;;;;;;;;;;;40323:15;40348:6;40341:24;;;40374:4;40341:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40341:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40341:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;40341:39:0;;;;;;;;;40323:57;;40401:9;40391:29;;;40421:6;40391:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40391:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40391:37:0;;;;40439:14;40463:6;40456:24;;;40489:4;40456:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40456:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40456:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;40456:39:0;;;;;;;;;40439:56;;40519:7;40510:6;:16;40506:1096;;;40543:15;40561:19;40572:7;40561:6;:10;;:19;;;;:::i;:::-;40543:37;;40595:13;40621:9;40611:25;;;:27;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40611:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40611:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;40611:27:0;;;;;;;;;40595:43;;40653:30;40698:17;40747:5;40740:23;;;40772:4;40740:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40740:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40740:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;40740:38:0;;;;;;;;;40730:48;;40793:39;40820:8;;;;;;;;;;;40830:1;40800:6;40793:26;;;;:39;;;;;:::i;:::-;40847:45;40874:8;;;;;;;;;;;40884:7;40854:6;40847:26;;;;:45;;;;;:::i;:::-;40950:8;;;;;;;;;;;40936:59;;;40996:6;41004:5;41011:7;41020:5;41027:1;40936:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40936:93:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40936:93:0;;;;;;39:16:-1;36:1;17:17;2:54;40936:93:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;40936:93:0;;;;;;;;;40907:122;;;;;;;;41058:8;;;;;;;;;;;41044:28;;;41091:6;41116:5;41140:7;41166:9;41194:13;41226:1;41044:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41044:198:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41044:198:0;;;;41273:5;41266:23;;;41298:4;41266:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41266:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41266:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;41266:38:0;;;;;;;;;41257:47;;41332:7;41323:6;:16;41319:272;;;41370:19;41381:7;41370:6;:10;;:19;;;;:::i;:::-;41360:29;;41408:17;41428:27;34622:5;41428:18;41440:5;;41428:7;:11;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;41408:47;;41474:35;41479:5;41486:22;41498:9;41486:7;:11;;:22;;;;:::i;:::-;41474:4;:35::i;:::-;41528:47;41555:8;;;;;;;;;;;41565:9;41535:5;41528:26;;;;:47;;;;;:::i;:::-;41319:272;;40506:1096;;;;;39981:1628;;;;;:::o;39142:273::-;39282:10;;;;;;;;;;;39268:24;;:10;:24;;;:52;;;;39310:10;;;;;;;;;;;39296:24;;:10;:24;;;39268:52;39246:113;;;;;;;;;;;;;;;;;;;;;;39380:9;39370:29;;;39400:6;39370:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39370:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39370:37:0;;;;39142:273;;:::o;37264:167::-;37358:8;;;;;;;;;;;37344:22;;:10;:22;;;37336:44;;;;;;;;;;;;;;;;;;;;;;37408:15;37391:14;:32;;;;37264:167;:::o;33900:25::-;;;;;;;;;;;;;:::o;36130:280::-;36234:10;;;;;;;;;;;36220:24;;:10;:24;;;:52;;;;36262:10;;;;;;;;;;;36248:24;;:10;:24;;;36220:52;36198:113;;;;;;;;;;;;;;;;;;;;;;36356:1;36330:28;;:6;:14;36337:6;36330:14;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;36322:46;;;;;;;;;;;;;;;;;;;;;;36396:6;36379;:14;36386:6;36379:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;36130:280;;:::o;34250:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;33711:73::-;33742:42;33711:73;:::o;36983:273::-;37082:10;;;;;;;;;;;37068:24;;:10;:24;;;37060:48;;;;;;;;;;;;;;;;;;;;;;37149:9;37127:31;;:10;:18;37138:6;37127:18;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;;37119:73;;;;;;;;;;;;;;;;;;;;;;37243:5;37203:18;:26;37222:6;37203:26;;;;;;;;;;;;;;;:37;37230:9;37203:37;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;36983:273;;:::o;33868:25::-;;;;;;;;;;;;;:::o;33961:23::-;;;;;;;;;;;;;:::o;35445:214::-;35519:10;;;;;;;;;;;35505:24;;:10;:24;;;35497:48;;;;;;;;;;;;;;;;;;;;;;34622:5;35564:6;:13;;35556:70;;;;;;;;;;;;;;;;;;;;;;35645:6;35637:5;:14;;;;35445:214;:::o;34592:35::-;34622:5;34592:35;:::o;34153:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;39423:455::-;39555:16;39584;39610:6;39603:24;;;39628:9;39603:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39603:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39603:35:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;39603:35:0;;;;;;;;;39584:54;;39649:13;39675:9;39665:25;;;:27;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39665:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39665:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;39665:27:0;;;;;;;;;39649:43;;39732:8;;;;;;;;;;;39718:41;;;39774:6;39795:5;39815:8;39838:5;39858:1;39718:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39718:152:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39718:152:0;;;;;;39:16:-1;36:1;17:17;2:54;39718:152:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;39718:152:0;;;;;;;;;39703:167;;;;;39423:455;;;;;;;:::o;34495:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;38493:134::-;38551:7;38588:10;:18;38599:6;38588:18;;;;;;;;;;;;;;;;;;;;;;;;;38578:39;;;:41;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38578:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38578:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38578:41:0;;;;;;;;;38571:48;;38493:134;;;:::o;37439:462::-;37549:10;;;;;;;;;;;37535:24;;:10;:24;;;:52;;;;37577:10;;;;;;;;;;;37563:24;;:10;:24;;;37535:52;37513:113;;;;;;;;;;;;;;;;;;;;;;37686:4;37645:45;;:18;:26;37664:6;37645:26;;;;;;;;;;;;;;;:37;37672:9;37645:37;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;37637:67;;;;;;;;;;;;;;;;;;;;;;37717:16;37736:10;:18;37747:6;37736:18;;;;;;;;;;;;;;;;;;;;;;;;;37717:37;;37789:1;37769:22;;:8;:22;;;37765:88;;37818:8;37808:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37808:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37808:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;37808:33:0;;;;;;;;;;37765:88;37884:9;37863:10;:18;37874:6;37863:18;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;37439:462;;;:::o;41847:3451::-;42230:7;42277:5;;:12;;42258:8;;:15;;:31;42250:51;;;;;;;;;;;;;;;;;;;;;;42357:9;42369:1;42357:13;;42352:195;42376:8;;:15;;42372:1;:19;42352:195;;;42444:1;42421:25;;:8;;42430:1;42421:11;;;;;;;;;;;;;;;;;;;;;;:25;;;;42413:48;;;;;;;;;;;;;;;;;;;;;;42484:23;:36;42508:8;;42517:1;42508:11;;;;;;;;;;;;;;;;;;;;;;42484:36;;;;;;;;;;;;;;;;;;;;;;;;;42476:59;;;;;;;;;;;;;;;;;;;;;;42393:3;;;;;;;42352:195;;;;42559:23;42592:10;42585:24;;;:26;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42585:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42585:26:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;42585:26:0;;;;;;;;;42559:52;;42622:21;42653:8;42646:22;;;:24;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42646:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42646:24:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;42646:24:0;;;;;;;;;42622:48;;42723:130;42773:10;42806:4;42826:16;42730:10;42723:35;;;;:130;;;;;;:::i;:::-;42951:34;42988:127;43091:10;43084:27;;;:29;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43084:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43084:29:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;43084:29:0;;;;;;;;;43076:38;;43072:2;:42;42988:65;43030:10;43023:27;;;:29;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43023:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43023:29:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;43023:29:0;;;;;;;;;42988:16;:34;;:65;;;;:::i;:::-;:83;;:127;;;;:::i;:::-;42951:164;;43378:33;43421:15;43414:33;;;43462:10;43414:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43414:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43414:69:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;43414:69:0;;;;;;;;;43378:105;;43526:26;43498:25;:54;43494:232;;;43579:10;:27;43590:15;43579:27;;;;;;;;;;;;;;;;;;;;;;;;;43569:54;;;43642:57;43673:25;43642:26;:30;;:57;;;;:::i;:::-;43569:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43569:145:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43569:145:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;43569:145:0;;;;;;;;;;43494:232;43893:45;43924:10;43936:1;43900:10;43893:30;;;;:45;;;;;:::i;:::-;43949:60;43980:10;43992:16;43956:10;43949:30;;;;:60;;;;;:::i;:::-;44027:10;44020:27;;;44048:16;44020:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44020:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44020:45:0;;;;44104:30;44144:15;44137:33;;;44193:4;44137:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44137:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44137:72:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;44137:72:0;;;;;;;;;44104:105;;44220:23;44246:89;34138:6;44246:42;44273:14;;44246:22;:26;;:42;;;;:::i;:::-;:46;;:89;;;;:::i;:::-;44220:115;;44370:1;44352:15;:19;44348:206;;;44388:69;44425:7;;;;;;;;;;;44434:22;44454:1;44434:15;:19;;:22;;;;:::i;:::-;44395:15;44388:36;;;;:69;;;;;:::i;:::-;44472:70;44509:8;;;;;;;;;;;44519:22;44539:1;44519:15;:19;;:22;;;;:::i;:::-;44479:15;44472:36;;;;:70;;;;;:::i;:::-;44348:206;44610:9;44622:1;44610:13;;44605:104;44629:8;;:15;;44625:1;:19;44605:104;;;44666:31;44675:8;;44684:1;44675:11;;;;;;;;;;;;;;;;;;;;;;44688:5;;44694:1;44688:8;;;;;;;;;;;;;;;;;;;;44666:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;44666:31:0;;;;;;:8;:31::i;:::-;;44646:3;;;;;;;44605:104;;;;44756:14;44780:13;44773:31;;;44813:4;44773:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44773:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44773:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;44773:46:0;;;;;;;;;44756:63;;44830:46;44864:8;44874:1;44837:13;44830:33;;;;:46;;;;;:::i;:::-;44887:51;44921:8;44931:6;44894:13;44887:33;;;;:51;;;;;:::i;:::-;44956:8;44949:24;;;44974:6;44949:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44949:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44949:32:0;;;;45032:19;45061:8;45054:26;;;45089:4;45054:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45054:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45054:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;45054:41:0;;;;;;;;;45032:63;;45124:17;45110:11;:31;45106:91;;;45158:27;;;;;;;;;;;;;;;;;;;45106:91;45216:8;45209:25;;;45235:10;45247:11;45209:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45209:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45209:50:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;45209:50:0;;;;;;;;;;45279:11;45272:18;;;;;;;;;;41847:3451;;;;;;;;;;:::o;33932:22::-;;;;;;;;;;;;;:::o;35667:145::-;35747:10;;;;;;;;;;;35733:24;;:10;:24;;;35725:48;;;;;;;;;;;;;;;;;;;;;;35795:9;35784:8;;:20;;;;;;;;;;;;;;;;;;35667:145;:::o;34094:50::-;34138:6;34094:50;:::o;34418:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35820:153::-;35904:10;;;;;;;;;;;35890:24;;:10;:24;;;35882:48;;;;;;;;;;;;;;;;;;;;;;35954:11;35941:10;;:24;;;;;;;;;;;;;;;;;;35820:153;:::o;34982:141::-;35060:10;;;;;;;;;;;35046:24;;:10;:24;;;35038:48;;;;;;;;;;;;;;;;;;;;;;35107:8;35097:7;;:18;;;;;;;;;;;;;;;;;;34982:141;:::o;37909:576::-;37974:17;37994:10;:18;38005:6;37994:18;;;;;;;;;;;;;;;;;;;;;;;;;37974:38;;38023:13;38049:9;38039:25;;;:27;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38039:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38039:27:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38039:27:0;;;;;;;;;38023:43;;38090:6;38081:15;;:5;:15;;;38077:360;;38113:17;38133:10;:18;38144:6;38133:18;;;;;;;;;;;;;;;:25;38152:5;38133:25;;;;;;;;;;;;;;;;;;;;;;;;;38113:45;;38173:47;38201:9;38212:7;38180:6;38173:27;;;;:47;;;;;:::i;:::-;38255:9;38245:28;;;38274:9;38245:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38245:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38245:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38245:39:0;;;;;;;;;38235:49;;38299:46;38326:9;38337:7;38306:5;38299:26;;;;:46;;;;;:::i;:::-;38077:360;;;;38378:47;38406:9;38417:7;38385:6;38378:27;;;;:47;;;;;:::i;:::-;38077:360;38457:9;38447:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38447:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38447:30:0;;;;37909:576;;;;:::o;35981:141::-;36061:8;;;;;;;;;;;36047:22;;:10;:22;;;36039:44;;;;;;;;;;;;;;;;;;;;;;36105:9;36094:8;;:20;;;;;;;;;;;;;;;;;;35981:141;:::o;36790:185::-;36890:8;;;;;;;;;;;36876:22;;:10;:22;;;36868:44;;;;;;;;;;;;;;;;;;;;;;36963:4;36923:18;:26;36942:6;36923:26;;;;;;;;;;;;;;;:37;36950:9;36923:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;36790:185;;:::o;38873:261::-;38990:10;;;;;;;;;;;38976:24;;:10;:24;;;:52;;;;39018:10;;;;;;;;;;;39004:24;;:10;:24;;;38976:52;38954:113;;;;;;;;;;;;;;;;;;;;;;39078:48;39106:10;39118:7;39085:6;39078:27;;;;:48;;;;;:::i;:::-;38873:261;;:::o;35284:153::-;35368:10;;;;;;;;;;;35354:24;;:10;:24;;;35346:48;;;;;;;;;;;;;;;;;;;;;;35418:11;35405:10;;:24;;;;;;;;;;;;;;;;;;35284:153;:::o;33991:23::-;;;;;;;;;;;;;:::o;34346:65::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35131:145::-;35211:10;;;;;;;;;;;35197:24;;:10;:24;;;35189:48;;;;;;;;;;;;;;;;;;;;;;35259:9;35248:8;;:20;;;;;;;;;;;;;;;;;;35131:145;:::o;41617:182::-;41708:6;:14;41715:6;41708:14;;;;;;;;;;;;;;;;;;;;;;;;;41694:28;;:10;:28;;;41686:47;;;;;;;;;;;;;;;;;;;;;;41754:10;:18;41765:6;41754:18;;;;;;;;;;;;;;;;;;;;;;;;;41744:38;;;41783:7;41744:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41744:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41744:47:0;;;;41617:182;;:::o;33791:68::-;;;;;;;;;;;;;:::o;34559:26::-;;;;:::o;36418:178::-;36509:10;;;;;;;;;;;36495:24;;:10;:24;;;36487:48;;;;;;;;;;;;;;;;;;;;;;36584:4;36546:23;:35;36570:10;36546:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;36418:178;:::o;38635:230::-;38726:10;;;;;;;;;;;38712:24;;:10;:24;;;:52;;;;38754:10;;;;;;;;;;;38740:24;;:10;:24;;;38712:52;38690:113;;;;;;;;;;;;;;;;;;;;;;38824:10;:18;38835:6;38824:18;;;;;;;;;;;;;;;;;;;;;;;;;38814:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38814:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38814:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;38814:43:0;;;;;;;;;;38635:230;:::o;34052:35::-;;;;:::o;1957:136::-;2015:7;2042:43;2046:1;2049;2042:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2035:50;;1957:136;;;;:::o;28024:622::-;28403:1;28394:5;:10;28393:62;;;;28453:1;28410:5;:15;;;28434:4;28441:7;28410:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28410:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28410:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28410:39:0;;;;;;;;;:44;28393:62;28385:152;;;;;;;;;;;;;;;;;;;;;;28548:90;28568:5;28598:22;;;28622:7;28631:5;28575:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28575:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;28575:62:0;28548:19;:90::i;:::-;28024:622;;;:::o;2847:471::-;2905:7;3155:1;3150;:6;3146:47;;;3180:1;3173:8;;;;3146:47;3205:9;3221:1;3217;:5;3205:17;;3250:1;3245;3241;:5;;;;;;:10;3233:56;;;;;;;;;;;;;;;;;;;;;;3309:1;3302:8;;;2847:471;;;;;:::o;3794:132::-;3852:7;3879:39;3883:1;3886;3879:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3872:46;;3794:132;;;;:::o;27365:177::-;27448:86;27468:5;27498:23;;;27523:2;27527:5;27475:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27475:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;27475:58:0;27448:19;:86::i;:::-;27365:177;;;:::o;27550:205::-;27651:96;27671:5;27701:27;;;27730:4;27736:2;27740:5;27678:68;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;27678:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;27678:68:0;27651:19;:96::i;:::-;27550:205;;;;:::o;45306:984::-;45397:21;45463:1;45444:21;;:7;:21;;;;45436:41;;;;;;;;;;;;;;;;;;;;;;45754:1;45734;45709:5;45703:12;45679:4;45672:5;45668:16;45642:7;45618:4;45611:5;45607:16;45576:194;45796:16;45846:4;45840:11;45828:23;;45963:4;45959:9;45952:4;45945;45939;45935:15;45931:26;45927:42;45917:8;45913:57;45890:4;45865:120;46016:4;46006:8;45999:22;46074:4;46071:1;46064:4;46054:8;46050:19;46035:44;46109:9;46102:17;46142:1;46137:135;;;;46095:177;;46137:135;46248:4;46241;46231:8;46227:19;46220:33;46095:177;;45544:739;;;;;;:::o;2396:192::-;2482:7;2515:1;2510;:6;;2518:12;2502:29;;;;;;;;;;;;;;;;;;;;;;;;;2542:9;2558:1;2554;:5;2542:17;;2579:1;2572:8;;;2396:192;;;;;:::o;29670:761::-;30094:23;30120:69;30148:4;30120:69;;;;;;;;;;;;;;;;;30128:5;30120:27;;;;:69;;;;;:::i;:::-;30094:95;;30224:1;30204:10;:17;:21;30200:224;;;30346:10;30335:30;;;;;;;;;;;;;;30327:85;;;;;;;;;;;;;;;;;;;;;;30200:224;29670:761;;;:::o;4422:278::-;4508:7;4540:1;4536;:5;4543:12;4528:28;;;;;;;;;;;;;;;;;;;;;;;;;4567:9;4583:1;4579;:5;;;;;;4567:17;;4691:1;4684:8;;;4422:278;;;;;:::o;13491:196::-;13594:12;13626:53;13649:6;13657:4;13663:1;13666:12;13626:22;:53::i;:::-;13619:60;;13491:196;;;;;:::o;14868:979::-;14998:12;15031:18;15042:6;15031:10;:18::i;:::-;15023:60;;;;;;;;;;;;;;;;;;;;;;15157:12;15171:23;15198:6;:11;;15218:8;15229:4;15198:36;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;15156:78:0;;;;15249:7;15245:595;;;15280:10;15273:17;;;;;;15245:595;15414:1;15394:10;:17;:21;15390:439;;;15657:10;15651:17;15718:15;15705:10;15701:2;15697:19;15690:44;15605:148;15800:12;15793:20;;;;;;;;;;;;;;;;;;;;14868:979;;;;;;;:::o;10573:422::-;10633:4;10841:12;10952:7;10940:20;10932:28;;10986:1;10979:4;:8;10972:15;;;10573:422;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:146;;371:6;358:20;349:29;;383:41;418:5;383:41;;;343:86;;;;;462:360;;;600:3;593:4;585:6;581:17;577:27;567:2;;618:1;615;608:12;567:2;651:6;638:20;628:30;;678:18;670:6;667:30;664:2;;;710:1;707;700:12;664:2;744:4;736:6;732:17;720:29;;795:3;787:4;779:6;775:17;765:8;761:32;758:41;755:2;;;812:1;809;802:12;755:2;560:262;;;;;;846:363;;;987:3;980:4;972:6;968:17;964:27;954:2;;1005:1;1002;995:12;954:2;1038:6;1025:20;1015:30;;1065:18;1057:6;1054:30;1051:2;;;1097:1;1094;1087:12;1051:2;1131:4;1123:6;1119:17;1107:29;;1182:3;1174:4;1166:6;1162:17;1152:8;1148:32;1145:41;1142:2;;;1199:1;1196;1189:12;1142:2;947:262;;;;;;1235:722;;1363:3;1356:4;1348:6;1344:17;1340:27;1330:2;;1381:1;1378;1371:12;1330:2;1411:6;1405:13;1433:80;1448:64;1505:6;1448:64;;;1433:80;;;1424:89;;1530:5;1555:6;1548:5;1541:21;1585:4;1577:6;1573:17;1563:27;;1607:4;1602:3;1598:14;1591:21;;1660:6;1707:3;1699:4;1691:6;1687:17;1682:3;1678:27;1675:36;1672:2;;;1724:1;1721;1714:12;1672:2;1749:1;1734:217;1759:6;1756:1;1753:13;1734:217;;;1817:3;1839:48;1883:3;1871:10;1839:48;;;1834:3;1827:61;1911:4;1906:3;1902:14;1895:21;;1939:4;1934:3;1930:14;1923:21;;1791:160;1781:1;1778;1774:9;1769:14;;1734:217;;;1738:14;1323:634;;;;;;;;1965:128;;2046:6;2040:13;2031:22;;2058:30;2082:5;2058:30;;;2025:68;;;;;2100:130;;2180:6;2167:20;2158:29;;2192:33;2219:5;2192:33;;;2152:78;;;;;2237:134;;2321:6;2315:13;2306:22;;2333:33;2360:5;2333:33;;;2300:71;;;;;2378:130;;2460:6;2454:13;2445:22;;2472:31;2497:5;2472:31;;;2439:69;;;;;2515:241;;2619:2;2607:9;2598:7;2594:23;2590:32;2587:2;;;2635:1;2632;2625:12;2587:2;2670:1;2687:53;2732:7;2723:6;2712:9;2708:22;2687:53;;;2677:63;;2649:97;2581:175;;;;;2763:263;;2878:2;2866:9;2857:7;2853:23;2849:32;2846:2;;;2894:1;2891;2884:12;2846:2;2929:1;2946:64;3002:7;2993:6;2982:9;2978:22;2946:64;;;2936:74;;2908:108;2840:186;;;;;3033:257;;3145:2;3133:9;3124:7;3120:23;3116:32;3113:2;;;3161:1;3158;3151:12;3113:2;3196:1;3213:61;3266:7;3257:6;3246:9;3242:22;3213:61;;;3203:71;;3175:105;3107:183;;;;;3297:366;;;3418:2;3406:9;3397:7;3393:23;3389:32;3386:2;;;3434:1;3431;3424:12;3386:2;3469:1;3486:53;3531:7;3522:6;3511:9;3507:22;3486:53;;;3476:63;;3448:97;3576:2;3594:53;3639:7;3630:6;3619:9;3615:22;3594:53;;;3584:63;;3555:98;3380:283;;;;;;3670:491;;;;3808:2;3796:9;3787:7;3783:23;3779:32;3776:2;;;3824:1;3821;3814:12;3776:2;3859:1;3876:53;3921:7;3912:6;3901:9;3897:22;3876:53;;;3866:63;;3838:97;3966:2;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;;;3974:63;;3945:98;4074:2;4092:53;4137:7;4128:6;4117:9;4113:22;4092:53;;;4082:63;;4053:98;3770:391;;;;;;4168:1219;;;;;;;;;4446:3;4434:9;4425:7;4421:23;4417:33;4414:2;;;4463:1;4460;4453:12;4414:2;4498:1;4515:53;4560:7;4551:6;4540:9;4536:22;4515:53;;;4505:63;;4477:97;4605:2;4623:53;4668:7;4659:6;4648:9;4644:22;4623:53;;;4613:63;;4584:98;4713:2;4731:53;4776:7;4767:6;4756:9;4752:22;4731:53;;;4721:63;;4692:98;4821:2;4839:53;4884:7;4875:6;4864:9;4860:22;4839:53;;;4829:63;;4800:98;4957:3;4946:9;4942:19;4929:33;4982:18;4974:6;4971:30;4968:2;;;5014:1;5011;5004:12;4968:2;5042:88;5122:7;5113:6;5102:9;5098:22;5042:88;;;5032:98;;;;4908:228;5195:3;5184:9;5180:19;5167:33;5220:18;5212:6;5209:30;5206:2;;;5252:1;5249;5242:12;5206:2;5280:91;5363:7;5354:6;5343:9;5339:22;5280:91;;;5270:101;;;;5146:231;4408:979;;;;;;;;;;;;5394:366;;;5515:2;5503:9;5494:7;5490:23;5486:32;5483:2;;;5531:1;5528;5521:12;5483:2;5566:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;;;5573:63;;5545:97;5673:2;5691:53;5736:7;5727:6;5716:9;5712:22;5691:53;;;5681:63;;5652:98;5477:283;;;;;;5767:257;;5879:2;5867:9;5858:7;5854:23;5850:32;5847:2;;;5895:1;5892;5885:12;5847:2;5930:1;5947:61;6000:7;5991:6;5980:9;5976:22;5947:61;;;5937:71;;5909:105;5841:183;;;;;6031:241;;6135:2;6123:9;6114:7;6110:23;6106:32;6103:2;;;6151:1;6148;6141:12;6103:2;6186:1;6203:53;6248:7;6239:6;6228:9;6224:22;6203:53;;;6193:63;;6165:97;6097:175;;;;;6279:263;;6394:2;6382:9;6373:7;6369:23;6365:32;6362:2;;;6410:1;6407;6400:12;6362:2;6445:1;6462:64;6518:7;6509:6;6498:9;6494:22;6462:64;;;6452:74;;6424:108;6356:186;;;;;6549:528;;;6706:2;6694:9;6685:7;6681:23;6677:32;6674:2;;;6722:1;6719;6712:12;6674:2;6757:1;6774:64;6830:7;6821:6;6810:9;6806:22;6774:64;;;6764:74;;6736:108;6896:2;6885:9;6881:18;6875:25;6920:18;6912:6;6909:30;6906:2;;;6952:1;6949;6942:12;6906:2;6972:89;7053:7;7044:6;7033:9;7029:22;6972:89;;;6962:99;;6854:213;6668:409;;;;;;7084:259;;7197:2;7185:9;7176:7;7172:23;7168:32;7165:2;;;7213:1;7210;7203:12;7165:2;7248:1;7265:62;7319:7;7310:6;7299:9;7295:22;7265:62;;;7255:72;;7227:106;7159:184;;;;;7351:173;;7438:46;7480:3;7472:6;7438:46;;;7513:4;7508:3;7504:14;7490:28;;7431:93;;;;;7532:142;7623:45;7662:5;7623:45;;;7618:3;7611:58;7605:69;;;7681:113;7764:24;7782:5;7764:24;;;7759:3;7752:37;7746:48;;;7832:690;;7977:54;8025:5;7977:54;;;8044:86;8123:6;8118:3;8044:86;;;8037:93;;8151:56;8201:5;8151:56;;;8227:7;8255:1;8240:260;8265:6;8262:1;8259:13;8240:260;;;8332:6;8326:13;8353:63;8412:3;8397:13;8353:63;;;8346:70;;8433:60;8486:6;8433:60;;;8423:70;;8297:203;8287:1;8284;8280:9;8275:14;;8240:260;;;8244:14;8513:3;8506:10;;7956:566;;;;;;;;8530:104;8607:21;8622:5;8607:21;;;8602:3;8595:34;8589:45;;;8641:356;;8769:38;8801:5;8769:38;;;8819:88;8900:6;8895:3;8819:88;;;8812:95;;8912:52;8957:6;8952:3;8945:4;8938:5;8934:16;8912:52;;;8985:6;8980:3;8976:16;8969:23;;8749:248;;;;;;9004:142;9095:45;9134:5;9095:45;;;9090:3;9083:58;9077:69;;;9153:347;;9265:39;9298:5;9265:39;;;9316:71;9380:6;9375:3;9316:71;;;9309:78;;9392:52;9437:6;9432:3;9425:4;9418:5;9414:16;9392:52;;;9465:29;9487:6;9465:29;;;9460:3;9456:39;9449:46;;9245:255;;;;;;9508:329;;9668:67;9732:2;9727:3;9668:67;;;9661:74;;9768:31;9764:1;9759:3;9755:11;9748:52;9828:2;9823:3;9819:12;9812:19;;9654:183;;;;9846:311;;10006:67;10070:2;10065:3;10006:67;;;9999:74;;10106:13;10102:1;10097:3;10093:11;10086:34;10148:2;10143:3;10139:12;10132:19;;9992:165;;;;10166:311;;10326:67;10390:2;10385:3;10326:67;;;10319:74;;10426:13;10422:1;10417:3;10413:11;10406:34;10468:2;10463:3;10459:12;10452:19;;10312:165;;;;10486:306;;10646:66;10710:1;10705:3;10646:66;;;10639:73;;10745:9;10741:1;10736:3;10732:11;10725:30;10783:2;10778:3;10774:12;10767:19;;10632:160;;;;10801:381;;10961:67;11025:2;11020:3;10961:67;;;10954:74;;11061:34;11057:1;11052:3;11048:11;11041:55;11130:14;11125:2;11120:3;11116:12;11109:36;11173:2;11168:3;11164:12;11157:19;;10947:235;;;;11191:310;;11351:67;11415:2;11410:3;11351:67;;;11344:74;;11451:12;11447:1;11442:3;11438:11;11431:33;11492:2;11487:3;11483:12;11476:19;;11337:164;;;;11510:308;;11670:66;11734:1;11729:3;11670:66;;;11663:73;;11769:11;11765:1;11760:3;11756:11;11749:32;11809:2;11804:3;11800:12;11793:19;;11656:162;;;;11827:304;;11987:66;12051:1;12046:3;11987:66;;;11980:73;;12086:7;12082:1;12077:3;12073:11;12066:28;12122:2;12117:3;12113:12;12106:19;;11973:158;;;;12140:370;;12300:67;12364:2;12359:3;12300:67;;;12293:74;;12400:34;12396:1;12391:3;12387:11;12380:55;12469:3;12464:2;12459:3;12455:12;12448:25;12501:2;12496:3;12492:12;12485:19;;12286:224;;;;12519:305;;12679:66;12743:1;12738:3;12679:66;;;12672:73;;12778:8;12774:1;12769:3;12765:11;12758:29;12815:2;12810:3;12806:12;12799:19;;12665:159;;;;12833:317;;12993:67;13057:2;13052:3;12993:67;;;12986:74;;13093:19;13089:1;13084:3;13080:11;13073:40;13141:2;13136:3;13132:12;13125:19;;12979:171;;;;13159:329;;13319:67;13383:2;13378:3;13319:67;;;13312:74;;13419:31;13415:1;13410:3;13406:11;13399:52;13479:2;13474:3;13470:12;13463:19;;13305:183;;;;13497:379;;13657:67;13721:2;13716:3;13657:67;;;13650:74;;13757:34;13753:1;13748:3;13744:11;13737:55;13826:12;13821:2;13816:3;13812:12;13805:34;13867:2;13862:3;13858:12;13851:19;;13643:233;;;;13885:306;;14045:66;14109:1;14104:3;14045:66;;;14038:73;;14144:9;14140:1;14135:3;14131:11;14124:30;14182:2;14177:3;14173:12;14166:19;;14031:160;;;;14200:308;;14360:66;14424:1;14419:3;14360:66;;;14353:73;;14459:11;14455:1;14450:3;14446:11;14439:32;14499:2;14494:3;14490:12;14483:19;;14346:162;;;;14517:391;;14677:67;14741:2;14736:3;14677:67;;;14670:74;;14777:34;14773:1;14768:3;14764:11;14757:55;14846:24;14841:2;14836:3;14832:12;14825:46;14899:2;14894:3;14890:12;14883:19;;14663:245;;;;14916:103;14989:24;15007:5;14989:24;;;14984:3;14977:37;14971:48;;;15026:113;15109:24;15127:5;15109:24;;;15104:3;15097:37;15091:48;;;15146:262;;15290:93;15379:3;15370:6;15290:93;;;15283:100;;15400:3;15393:10;;15271:137;;;;;15415:213;;15533:2;15522:9;15518:18;15510:26;;15547:71;15615:1;15604:9;15600:17;15591:6;15547:71;;;15504:124;;;;;15635:340;;15789:2;15778:9;15774:18;15766:26;;15803:79;15879:1;15868:9;15864:17;15855:6;15803:79;;;15893:72;15961:2;15950:9;15946:18;15937:6;15893:72;;;15760:215;;;;;;15982:324;;16128:2;16117:9;16113:18;16105:26;;16142:71;16210:1;16199:9;16195:17;16186:6;16142:71;;;16224:72;16292:2;16281:9;16277:18;16268:6;16224:72;;;16099:207;;;;;;16313:435;;16487:2;16476:9;16472:18;16464:26;;16501:71;16569:1;16558:9;16554:17;16545:6;16501:71;;;16583:72;16651:2;16640:9;16636:18;16627:6;16583:72;;;16666;16734:2;16723:9;16719:18;16710:6;16666:72;;;16458:290;;;;;;;16755:935;;17071:3;17060:9;17056:19;17048:27;;17086:71;17154:1;17143:9;17139:17;17130:6;17086:71;;;17168:72;17236:2;17225:9;17221:18;17212:6;17168:72;;;17251;17319:2;17308:9;17304:18;17295:6;17251:72;;;17334;17402:2;17391:9;17387:18;17378:6;17334:72;;;17455:9;17449:4;17445:20;17439:3;17428:9;17424:19;17417:49;17480:108;17583:4;17574:6;17480:108;;;17472:116;;17599:81;17675:3;17664:9;17660:19;17651:6;17599:81;;;17042:648;;;;;;;;;;17697:675;;17935:3;17924:9;17920:19;17912:27;;17950:71;18018:1;18007:9;18003:17;17994:6;17950:71;;;18032:72;18100:2;18089:9;18085:18;18076:6;18032:72;;;18115;18183:2;18172:9;18168:18;18159:6;18115:72;;;18198;18266:2;18255:9;18251:18;18242:6;18198:72;;;18281:81;18357:3;18346:9;18342:19;18333:6;18281:81;;;17906:466;;;;;;;;;18379:324;;18525:2;18514:9;18510:18;18502:26;;18539:71;18607:1;18596:9;18592:17;18583:6;18539:71;;;18621:72;18689:2;18678:9;18674:18;18665:6;18621:72;;;18496:207;;;;;;18710:201;;18822:2;18811:9;18807:18;18799:26;;18836:65;18898:1;18887:9;18883:17;18874:6;18836:65;;;18793:118;;;;;18918:301;;19056:2;19045:9;19041:18;19033:26;;19106:9;19100:4;19096:20;19092:1;19081:9;19077:17;19070:47;19131:78;19204:4;19195:6;19131:78;;;19123:86;;19027:192;;;;;19226:407;;19417:2;19406:9;19402:18;19394:26;;19467:9;19461:4;19457:20;19453:1;19442:9;19438:17;19431:47;19492:131;19618:4;19492:131;;;19484:139;;19388:245;;;;19640:407;;19831:2;19820:9;19816:18;19808:26;;19881:9;19875:4;19871:20;19867:1;19856:9;19852:17;19845:47;19906:131;20032:4;19906:131;;;19898:139;;19802:245;;;;20054:407;;20245:2;20234:9;20230:18;20222:26;;20295:9;20289:4;20285:20;20281:1;20270:9;20266:17;20259:47;20320:131;20446:4;20320:131;;;20312:139;;20216:245;;;;20468:407;;20659:2;20648:9;20644:18;20636:26;;20709:9;20703:4;20699:20;20695:1;20684:9;20680:17;20673:47;20734:131;20860:4;20734:131;;;20726:139;;20630:245;;;;20882:407;;21073:2;21062:9;21058:18;21050:26;;21123:9;21117:4;21113:20;21109:1;21098:9;21094:17;21087:47;21148:131;21274:4;21148:131;;;21140:139;;21044:245;;;;21296:407;;21487:2;21476:9;21472:18;21464:26;;21537:9;21531:4;21527:20;21523:1;21512:9;21508:17;21501:47;21562:131;21688:4;21562:131;;;21554:139;;21458:245;;;;21710:407;;21901:2;21890:9;21886:18;21878:26;;21951:9;21945:4;21941:20;21937:1;21926:9;21922:17;21915:47;21976:131;22102:4;21976:131;;;21968:139;;21872:245;;;;22124:407;;22315:2;22304:9;22300:18;22292:26;;22365:9;22359:4;22355:20;22351:1;22340:9;22336:17;22329:47;22390:131;22516:4;22390:131;;;22382:139;;22286:245;;;;22538:407;;22729:2;22718:9;22714:18;22706:26;;22779:9;22773:4;22769:20;22765:1;22754:9;22750:17;22743:47;22804:131;22930:4;22804:131;;;22796:139;;22700:245;;;;22952:407;;23143:2;23132:9;23128:18;23120:26;;23193:9;23187:4;23183:20;23179:1;23168:9;23164:17;23157:47;23218:131;23344:4;23218:131;;;23210:139;;23114:245;;;;23366:407;;23557:2;23546:9;23542:18;23534:26;;23607:9;23601:4;23597:20;23593:1;23582:9;23578:17;23571:47;23632:131;23758:4;23632:131;;;23624:139;;23528:245;;;;23780:407;;23971:2;23960:9;23956:18;23948:26;;24021:9;24015:4;24011:20;24007:1;23996:9;23992:17;23985:47;24046:131;24172:4;24046:131;;;24038:139;;23942:245;;;;24194:407;;24385:2;24374:9;24370:18;24362:26;;24435:9;24429:4;24425:20;24421:1;24410:9;24406:17;24399:47;24460:131;24586:4;24460:131;;;24452:139;;24356:245;;;;24608:407;;24799:2;24788:9;24784:18;24776:26;;24849:9;24843:4;24839:20;24835:1;24824:9;24820:17;24813:47;24874:131;25000:4;24874:131;;;24866:139;;24770:245;;;;25022:407;;25213:2;25202:9;25198:18;25190:26;;25263:9;25257:4;25253:20;25249:1;25238:9;25234:17;25227:47;25288:131;25414:4;25288:131;;;25280:139;;25184:245;;;;25436:407;;25627:2;25616:9;25612:18;25604:26;;25677:9;25671:4;25667:20;25663:1;25652:9;25648:17;25641:47;25702:131;25828:4;25702:131;;;25694:139;;25598:245;;;;25850:213;;25968:2;25957:9;25953:18;25945:26;;25982:71;26050:1;26039:9;26035:17;26026:6;25982:71;;;25939:124;;;;;26070:506;;;26205:11;26192:25;26301:1;26295:4;26291:12;26280:8;26264:14;26260:29;26256:48;26236:18;26232:73;26222:2;;26319:1;26316;26309:12;26222:2;26350:18;26340:8;26336:33;26328:41;;26403:4;26390:18;26380:28;;26428:18;26420:6;26417:30;26414:2;;;26460:1;26457;26450:12;26414:2;26488;26482:4;26478:13;26470:21;;26542:4;26534:6;26530:17;26514:14;26510:38;26504:4;26500:49;26497:2;;;26562:1;26559;26552:12;26497:2;26160:416;;;;;;;26583:256;;26645:2;26639:9;26629:19;;26683:4;26675:6;26671:17;26782:6;26770:10;26767:22;26746:18;26734:10;26731:34;26728:62;26725:2;;;26803:1;26800;26793:12;26725:2;26823:10;26819:2;26812:22;26623:216;;;;;26846:304;;27005:18;26997:6;26994:30;26991:2;;;27037:1;27034;27027:12;26991:2;27072:4;27064:6;27060:17;27052:25;;27135:4;27129;27125:15;27117:23;;26928:222;;;;27157:151;;27243:3;27235:11;;27281:4;27276:3;27272:14;27264:22;;27229:79;;;;27315:137;;27424:5;27418:12;27408:22;;27389:63;;;;27459:121;;27552:5;27546:12;27536:22;;27517:63;;;;27587:122;;27681:5;27675:12;27665:22;;27646:63;;;;27716:108;;27814:4;27809:3;27805:14;27797:22;;27791:33;;;;27832:178;;27962:6;27957:3;27950:19;27999:4;27994:3;27990:14;27975:29;;27943:67;;;;;28019:144;;28154:3;28139:18;;28132:31;;;;;28172:163;;28287:6;28282:3;28275:19;28324:4;28319:3;28315:14;28300:29;;28268:67;;;;;28343:91;;28405:24;28423:5;28405:24;;;28394:35;;28388:46;;;;28441:99;;28511:24;28529:5;28511:24;;;28500:35;;28494:46;;;;28547:85;;28620:5;28613:13;28606:21;28595:32;;28589:43;;;;28639:121;;28712:42;28705:5;28701:54;28690:65;;28684:76;;;;28767:72;;28829:5;28818:16;;28812:27;;;;28846:81;;28917:4;28910:5;28906:16;28895:27;;28889:38;;;;28934:129;;29021:37;29052:5;29021:37;;;29008:50;;29002:61;;;;29070:116;;29157:24;29175:5;29157:24;;;29144:37;;29138:48;;;;29193:121;;29272:37;29303:5;29272:37;;;29259:50;;29253:61;;;;29321:108;;29400:24;29418:5;29400:24;;;29387:37;;29381:48;;;;29437:268;29502:1;29509:101;29523:6;29520:1;29517:13;29509:101;;;29599:1;29594:3;29590:11;29584:18;29580:1;29575:3;29571:11;29564:39;29545:2;29542:1;29538:10;29533:15;;29509:101;;;29625:6;29622:1;29619:13;29616:2;;;29690:1;29681:6;29676:3;29672:16;29665:27;29616:2;29486:219;;;;;29713:97;;29801:2;29797:7;29792:2;29785:5;29781:14;29777:28;29767:38;;29761:49;;;;29818:117;29887:24;29905:5;29887:24;;;29880:5;29877:35;29867:2;;29926:1;29923;29916:12;29867:2;29861:74;;29942:133;30019:32;30045:5;30019:32;;;30012:5;30009:43;29999:2;;30066:1;30063;30056:12;29999:2;29993:82;;30082:111;30148:21;30163:5;30148:21;;;30141:5;30138:32;30128:2;;30184:1;30181;30174:12;30128:2;30122:71;;30200:117;30269:24;30287:5;30269:24;;;30262:5;30259:35;30249:2;;30308:1;30305;30298:12;30249:2;30243:74;;30324:113;30391:22;30407:5;30391:22;;;30384:5;30381:33;30371:2;;30428:1;30425;30418:12;30371:2;30365:72;
Swarm Source
ipfs://fe9f676bd03e812203a72752018742ffe3290ed891145ddf6304f4d3a83d35cb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.