Contract Address :
0xbB96b900EF03507b530D158cc5A0B0C8c3a8D178
Overview
- Balance
- 0 Merkle
- Tokens
-
Fetching tokens... Error trying to fetch balances.
More Info
QR Code
Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Contracts
KYC
Audit
- Contract name:
- BigTycoon
- Optimization enabled
- false
- Compiler version
- v0.8.18+commit.87f61d96
- EVM Version
- default
- Verified at
- 2023-06-21T05:29:02.619474Z
Contract source code
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; library Counters { struct Counter { uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient,uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner,address indexed spender,uint256 value); } interface IERC20Mintable is IERC20 { function mint(address _to, uint256 amount) external returns (bool); function burn(uint256 amount) external ; event Mint(address indexed minter, address indexed to, uint256 amount); event Burn(address indexed burner, uint256 amount); } library Address { function isContract(address account) internal view returns (bool) { bytes32 codehash; bytes32 accountHash= 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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); } } } } abstract contract Initializable { uint8 private _initialized; bool private _initializing; event Initialized(uint8 version); modifier initializer() { bool isTopLevelCall = !_initializing; require( (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1), "Initializable: contract is already initialized" ); _initialized = 1; if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(1); } } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address previousOwner, address newOwner); function owner() external view returns (address) { return _owner; } function setOwner(address newOwner) internal { _owner = newOwner; } modifier onlyOwner() { require(_msgSender() == _owner, "Ownable: caller is not the owner"); _; } function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0),"Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); setOwner(newOwner); } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused, "Pausable: paused"); _; } function pause() external onlyOwner { paused = true; emit Pause(); } function unpause() external onlyOwner { paused = false; emit Unpause(); } } interface IERC20Metadata is IERC20Mintable { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV // Deprecated in v4.8 } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } interface IERC20Permit is IERC20Metadata{ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } abstract contract EIP712 { bytes32 private _CACHED_DOMAIN_SEPARATOR; uint256 private _CACHED_CHAIN_ID; address private _CACHED_THIS; bytes32 private _HASHED_NAME; bytes32 private _HASHED_VERSION; bytes32 private _TYPE_HASH; function eip712(string memory name, string memory version) internal virtual { bytes32 hashedName = keccak256(bytes(name)); bytes32 hashedVersion = keccak256(bytes(version)); bytes32 typeHash = keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; _CACHED_CHAIN_ID = block.chainid; _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion); _CACHED_THIS = address(this); _TYPE_HASH = typeHash; } function _domainSeparatorV4() internal view returns (bytes32) { if (address(this) == _CACHED_THIS && block.chainid == _CACHED_CHAIN_ID) { return _CACHED_DOMAIN_SEPARATOR; } else { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } } function _buildDomainSeparator( bytes32 typeHash, bytes32 nameHash, bytes32 versionHash ) private view returns (bytes32) { return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this))); } function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash); } } interface IAntisnipe { function assureCanTransfer( address sender, address from, address to, uint256 amount ) external; } contract BigTycoon is Ownable, Pausable, Initializable, IERC20Permit, EIP712 { using Counters for Counters.Counter; string public override name; string public override symbol; uint8 public override decimals; IAntisnipe public antisnipe; bool public antisnipeDisable; mapping(address => uint256) internal _balances; mapping(address => mapping(address => uint256)) internal allowed; uint256 internal _totalSupply; mapping(address => Counters.Counter) private _nonces; bytes32 private constant _PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); function initialize( string memory tokenName, string memory tokenSymbol, uint8 tokenDecimals, address newOwner) external initializer { require(newOwner != address(0),"ERC20: new owner is the zero address"); name = tokenName; symbol = tokenSymbol; decimals = tokenDecimals; setOwner(newOwner); eip712(tokenName,"1"); } function mint(address to, uint256 amount) external override whenNotPaused onlyOwner returns (bool) { require(to != address(0), 'ERC20: mint to the zero address'); _beforeTokenTransfer(address(0), to, amount); _totalSupply += amount; _balances[to] += amount; emit Transfer(address(0), to, amount); return true; } function allowance(address _owner, address spender) external override view returns (uint256) { return allowed[_owner][spender]; } function totalSupply() external override view returns (uint256) { return _totalSupply; } function balanceOf(address account) external override view returns (uint256) { return _balances[account]; } function approve(address spender, uint256 value) external override whenNotPaused returns (bool) { _approve(_msgSender(), spender, value); return true; } function _approve(address _owner, address spender,uint256 value) internal { require(_owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); allowed[_owner][spender] = value; emit Approval(_owner, spender, value); } function transferFrom(address from, address to, uint256 value) external override whenNotPaused returns (bool) { require(value <= allowed[from][_msgSender()], "ERC20: transfer amount exceeds allowance"); _transfer(from, to, value); allowed[from][_msgSender()] -= value; return true; } function transfer(address to, uint256 value) external override whenNotPaused returns (bool) { _transfer(_msgSender(), to, value); return true; } function _transfer( address from, address to, uint256 value) internal { require(from != address(0), 'ERC20: transfer from the zero address'); require(to != address(0), 'ERC20: transfer to the zero address'); _beforeTokenTransfer(from, to, value); uint256 fromBalance = _balances[from]; require(fromBalance >= value, 'ERC20: transfer amount exceeds balance'); unchecked { _balances[from] = fromBalance - value; } _balances[to] += value; emit Transfer(from, to, value); } function burn(uint256 amount) external override { uint256 balance = _balances[_msgSender()]; require(amount > 0, "ERC20: burn amount not greater than 0"); require(balance >= amount, "ERC20: burn amount exceeds balance"); _beforeTokenTransfer(_msgSender(), address(0), amount); _totalSupply -= amount; _balances[_msgSender()] -= amount; emit Burn(_msgSender(), amount); emit Transfer(_msgSender(), address(0), amount); } function increaseAllowance(address spender, uint256 increment) external whenNotPaused returns (bool) { _increaseAllowance(_msgSender(), spender, increment); return true; } function decreaseAllowance(address spender, uint256 decrement) external whenNotPaused returns (bool) { _decreaseAllowance(_msgSender(), spender, decrement); return true; } function _increaseAllowance( address _owner, address spender, uint256 increment) internal { _approve(_owner, spender, allowed[_owner][spender]+increment); } function _decreaseAllowance(address _owner, address spender, uint256 decrement) internal { _approve(_owner,spender, allowed[_owner][spender]-decrement); } function permit( address _owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public whenNotPaused virtual override { require(block.timestamp <= deadline, "ERC20Permit: expired deadline"); bytes32 structHash = keccak256(abi.encode(_PERMIT_TYPEHASH, _owner, spender, value, _useNonce(_owner), deadline)); bytes32 hash = _hashTypedDataV4(structHash); address signer = ECDSA.recover(hash, v, r, s); require(signer == _owner, "ERC20Permit: invalid signature"); _approve(_owner, spender, value); } function nonces(address _owner) public view virtual override returns (uint256) { return _nonces[_owner].current(); } function DOMAIN_SEPARATOR() external view override returns (bytes32) { return _domainSeparatorV4(); } function _useNonce(address _owner) internal virtual returns (uint256 current) { Counters.Counter storage nonce = _nonces[_owner]; current = nonce.current(); nonce.increment(); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal whenNotPaused { if (from == address(0) || to == address(0)) return; if (!antisnipeDisable && address(antisnipe) != address(0)) antisnipe.assureCanTransfer(_msgSender(), from, to, amount); } function setAntisnipeDisable() external onlyOwner { require(!antisnipeDisable); antisnipeDisable = true; } function setAntisnipeAddress(address addr) external onlyOwner { antisnipe = IAntisnipe(addr); } }
Contract ABI
[{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"burner","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"type":"uint8","name":"version","internalType":"uint8","indexed":false}],"anonymous":false},{"type":"event","name":"Mint","inputs":[{"type":"address","name":"minter","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":false},{"type":"address","name":"newOwner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Pause","inputs":[],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Unpause","inputs":[],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_SEPARATOR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IAntisnipe"}],"name":"antisnipe","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"antisnipeDisable","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burn","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"decrement","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"increment","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"string","name":"tokenName","internalType":"string"},{"type":"string","name":"tokenSymbol","internalType":"string"},{"type":"uint8","name":"tokenDecimals","internalType":"uint8"},{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nonces","inputs":[{"type":"address","name":"_owner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pause","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"paused","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"permit","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAntisnipeAddress","inputs":[{"type":"address","name":"addr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAntisnipeDisable","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unpause","inputs":[]}]
Deployed ByteCode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806374fb20e1116100de578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e14610475578063de7ea79d146104a5578063e1e144de146104c1578063f2fde38b146104df5761018e565b8063a457c2d7146103f9578063a9059cbb14610429578063d505accf146104595761018e565b806374fb20e11461035b5780637ecebe00146103655780638456cb5914610395578063882cfb3f1461039f5780638da5cb5b146103bd57806395d89b41146103db5761018e565b8063395093511161014b57806342966c681161012557806342966c68146102d55780635c975abb146102f1578063611bf6291461030f57806370a082311461032b5761018e565b8063395093511461026b5780633f4ba83a1461029b57806340c10f19146102a55761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806323b872dd146101ff578063313ce5671461022f5780633644e5151461024d575b600080fd5b61019b6104fb565b6040516101a89190612554565b60405180910390f35b6101cb60048036038101906101c6919061261e565b610589565b6040516101d89190612679565b60405180910390f35b6101e96105f6565b6040516101f691906126a3565b60405180910390f35b610219600480360381019061021491906126be565b610600565b6040516102269190612679565b60405180910390f35b6102376107c7565b604051610244919061272d565b60405180910390f35b6102556107da565b6040516102629190612761565b60405180910390f35b6102856004803603810190610280919061261e565b6107e9565b6040516102929190612679565b60405180910390f35b6102a3610856565b005b6102bf60048036038101906102ba919061261e565b610933565b6040516102cc9190612679565b60405180910390f35b6102ef60048036038101906102ea919061277c565b610b73565b005b6102f9610d93565b6040516103069190612679565b60405180910390f35b610329600480360381019061032491906127a9565b610da6565b005b610345600480360381019061034091906127a9565b610e7f565b60405161035291906126a3565b60405180910390f35b610363610ec8565b005b61037f600480360381019061037a91906127a9565b610f94565b60405161038c91906126a3565b60405180910390f35b61039d610fe4565b005b6103a76110c2565b6040516103b49190612835565b60405180910390f35b6103c56110e8565b6040516103d2919061285f565b60405180910390f35b6103e3611111565b6040516103f09190612554565b60405180910390f35b610413600480360381019061040e919061261e565b61119f565b6040516104209190612679565b60405180910390f35b610443600480360381019061043e919061261e565b61120c565b6040516104509190612679565b60405180910390f35b610473600480360381019061046e91906128d2565b611279565b005b61048f600480360381019061048a9190612974565b61140b565b60405161049c91906126a3565b60405180910390f35b6104bf60048036038101906104ba9190612ae9565b611492565b005b6104c96116c3565b6040516104d69190612679565b60405180910390f35b6104f960048036038101906104f491906127a9565b6116d6565b005b6007805461050890612bb7565b80601f016020809104026020016040519081016040528092919081815260200182805461053490612bb7565b80156105815780601f1061055657610100808354040283529160200191610581565b820191906000526020600020905b81548152906001019060200180831161056457829003601f168201915b505050505081565b60008060149054906101000a900460ff16156105da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d190612c34565b60405180910390fd5b6105ec6105e561183f565b8484611847565b6001905092915050565b6000600c54905090565b60008060149054906101000a900460ff1615610651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064890612c34565b60405180910390fd5b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061069a61183f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070e90612cc6565b60405180910390fd5b610722848484611a10565b81600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061076c61183f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107b59190612d15565b92505081905550600190509392505050565b600960009054906101000a900460ff1681565b60006107e4611c87565b905090565b60008060149054906101000a900460ff161561083a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083190612c34565b60405180910390fd5b61084c61084561183f565b8484611d0d565b6001905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661089561183f565b73ffffffffffffffffffffffffffffffffffffffff16146108eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e290612d95565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60008060149054906101000a900460ff1615610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b90612c34565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166109c361183f565b73ffffffffffffffffffffffffffffffffffffffff1614610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1090612d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90612e01565b60405180910390fd5b610a9460008484611da4565b81600c6000828254610aa69190612e21565b9250508190555081600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610afc9190612e21565b925050819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b6191906126a3565b60405180910390a36001905092915050565b6000600a6000610b8161183f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008211610c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf890612ec7565b60405180910390fd5b81811015610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90612f59565b60405180910390fd5b610c57610c4f61183f565b600084611da4565b81600c6000828254610c699190612d15565b9250508190555081600a6000610c7d61183f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cc69190612d15565b92505081905550610cd561183f565b73ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca583604051610d1a91906126a3565b60405180910390a2600073ffffffffffffffffffffffffffffffffffffffff16610d4261183f565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d8791906126a3565b60405180910390a35050565b600060149054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610de561183f565b73ffffffffffffffffffffffffffffffffffffffff1614610e3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3290612d95565b60405180910390fd5b80600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f0761183f565b73ffffffffffffffffffffffffffffffffffffffff1614610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490612d95565b60405180910390fd5b600960159054906101000a900460ff1615610f7757600080fd5b6001600960156101000a81548160ff021916908315150217905550565b6000610fdd600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f71565b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661102361183f565b73ffffffffffffffffffffffffffffffffffffffff1614611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090612d95565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6008805461111e90612bb7565b80601f016020809104026020016040519081016040528092919081815260200182805461114a90612bb7565b80156111975780601f1061116c57610100808354040283529160200191611197565b820191906000526020600020905b81548152906001019060200180831161117a57829003601f168201915b505050505081565b60008060149054906101000a900460ff16156111f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e790612c34565b60405180910390fd5b6112026111fb61183f565b8484611f7f565b6001905092915050565b60008060149054906101000a900460ff161561125d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125490612c34565b60405180910390fd5b61126f61126861183f565b8484611a10565b6001905092915050565b600060149054906101000a900460ff16156112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090612c34565b60405180910390fd5b8342111561130c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130390612fc5565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861133b8c612016565b8960405160200161135196959493929190612fe5565b604051602081830303815290604052805190602001209050600061137482612074565b905060006113848287878761208e565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb90613092565b60405180910390fd5b6113ff8a8a8a611847565b50505050505050505050565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008060169054906101000a900460ff161590508080156114c557506001600060159054906101000a900460ff1660ff16105b806114f457506114d4306120b9565b1580156114f357506001600060159054906101000a900460ff1660ff16145b5b611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a90613124565b60405180910390fd5b6001600060156101000a81548160ff021916908360ff1602179055508015611571576001600060166101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d7906131b6565b60405180910390fd5b84600790816115ef9190613378565b5083600890816115ff9190613378565b5082600960006101000a81548160ff021916908360ff16021790555061162482612104565b611663856040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612147565b80156116bc5760008060166101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516116b39190613485565b60405180910390a15b5050505050565b600960159054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661171561183f565b73ffffffffffffffffffffffffffffffffffffffff161461176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176290612d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190613512565b60405180910390fd5b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260405161182b929190613532565b60405180910390a161183c81612104565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ad906135cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c9061365f565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a0391906126a3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a76906136f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590613783565b60405180910390fd5b611af9838383611da4565b6000600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790613815565b60405180910390fd5b818103600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c159190612e21565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c7991906126a3565b60405180910390a350505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015611ce7575060025446145b15611cf6576001549050611d0a565b611d076006546004546005546121f9565b90505b90565b611d9f838383600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d9a9190612e21565b611847565b505050565b600060149054906101000a900460ff1615611df4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611deb90612c34565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611e5b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611f6c57600960159054906101000a900460ff16158015611ecb5750600073ffffffffffffffffffffffffffffffffffffffff16600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15611f6b57600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d37a8dd611f1661183f565b8585856040518563ffffffff1660e01b8152600401611f389493929190613835565b600060405180830381600087803b158015611f5257600080fd5b505af1158015611f66573d6000803e3d6000fd5b505050505b5b505050565b600081600001549050919050565b612011838383600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461200c9190612d15565b611847565b505050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061206381611f71565b915061206e81612233565b50919050565b6000612087612081611c87565b83612249565b9050919050565b600080600061209f8787878761227c565b915091506120ac8161235e565b8192505050949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156120fb57506000801b8214155b92505050919050565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260048190555081600581905550466002819055506121a48184846121f9565b60018190555030600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806006819055505050505050565b6000838383463060405160200161221495949392919061387a565b6040516020818303038152906040528051906020012090509392505050565b6001816000016000828254019250508190555050565b6000828260405160200161225e929190613945565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156122b7576000600391509150612355565b6000600187878787604051600081526020016040526040516122dc949392919061397c565b6020604051602081039080840390855afa1580156122fe573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361234c57600060019250925050612355565b80600092509250505b94509492505050565b60006004811115612372576123716139c1565b5b816004811115612385576123846139c1565b5b03156124c1576001600481111561239f5761239e6139c1565b5b8160048111156123b2576123b16139c1565b5b036123f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e990613a3c565b60405180910390fd5b60026004811115612406576124056139c1565b5b816004811115612419576124186139c1565b5b03612459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245090613aa8565b60405180910390fd5b6003600481111561246d5761246c6139c1565b5b8160048111156124805761247f6139c1565b5b036124c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b790613b3a565b60405180910390fd5b5b50565b600081519050919050565b600082825260208201905092915050565b60005b838110156124fe5780820151818401526020810190506124e3565b60008484015250505050565b6000601f19601f8301169050919050565b6000612526826124c4565b61253081856124cf565b93506125408185602086016124e0565b6125498161250a565b840191505092915050565b6000602082019050818103600083015261256e818461251b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125b58261258a565b9050919050565b6125c5816125aa565b81146125d057600080fd5b50565b6000813590506125e2816125bc565b92915050565b6000819050919050565b6125fb816125e8565b811461260657600080fd5b50565b600081359050612618816125f2565b92915050565b6000806040838503121561263557612634612580565b5b6000612643858286016125d3565b925050602061265485828601612609565b9150509250929050565b60008115159050919050565b6126738161265e565b82525050565b600060208201905061268e600083018461266a565b92915050565b61269d816125e8565b82525050565b60006020820190506126b86000830184612694565b92915050565b6000806000606084860312156126d7576126d6612580565b5b60006126e5868287016125d3565b93505060206126f6868287016125d3565b925050604061270786828701612609565b9150509250925092565b600060ff82169050919050565b61272781612711565b82525050565b6000602082019050612742600083018461271e565b92915050565b6000819050919050565b61275b81612748565b82525050565b60006020820190506127766000830184612752565b92915050565b60006020828403121561279257612791612580565b5b60006127a084828501612609565b91505092915050565b6000602082840312156127bf576127be612580565b5b60006127cd848285016125d3565b91505092915050565b6000819050919050565b60006127fb6127f66127f18461258a565b6127d6565b61258a565b9050919050565b600061280d826127e0565b9050919050565b600061281f82612802565b9050919050565b61282f81612814565b82525050565b600060208201905061284a6000830184612826565b92915050565b612859816125aa565b82525050565b60006020820190506128746000830184612850565b92915050565b61288381612711565b811461288e57600080fd5b50565b6000813590506128a08161287a565b92915050565b6128af81612748565b81146128ba57600080fd5b50565b6000813590506128cc816128a6565b92915050565b600080600080600080600060e0888a0312156128f1576128f0612580565b5b60006128ff8a828b016125d3565b97505060206129108a828b016125d3565b96505060406129218a828b01612609565b95505060606129328a828b01612609565b94505060806129438a828b01612891565b93505060a06129548a828b016128bd565b92505060c06129658a828b016128bd565b91505092959891949750929550565b6000806040838503121561298b5761298a612580565b5b6000612999858286016125d3565b92505060206129aa858286016125d3565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6129f68261250a565b810181811067ffffffffffffffff82111715612a1557612a146129be565b5b80604052505050565b6000612a28612576565b9050612a3482826129ed565b919050565b600067ffffffffffffffff821115612a5457612a536129be565b5b612a5d8261250a565b9050602081019050919050565b82818337600083830152505050565b6000612a8c612a8784612a39565b612a1e565b905082815260208101848484011115612aa857612aa76129b9565b5b612ab3848285612a6a565b509392505050565b600082601f830112612ad057612acf6129b4565b5b8135612ae0848260208601612a79565b91505092915050565b60008060008060808587031215612b0357612b02612580565b5b600085013567ffffffffffffffff811115612b2157612b20612585565b5b612b2d87828801612abb565b945050602085013567ffffffffffffffff811115612b4e57612b4d612585565b5b612b5a87828801612abb565b9350506040612b6b87828801612891565b9250506060612b7c878288016125d3565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612bcf57607f821691505b602082108103612be257612be1612b88565b5b50919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612c1e6010836124cf565b9150612c2982612be8565b602082019050919050565b60006020820190508181036000830152612c4d81612c11565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612cb06028836124cf565b9150612cbb82612c54565b604082019050919050565b60006020820190508181036000830152612cdf81612ca3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d20826125e8565b9150612d2b836125e8565b9250828203905081811115612d4357612d42612ce6565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d7f6020836124cf565b9150612d8a82612d49565b602082019050919050565b60006020820190508181036000830152612dae81612d72565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000612deb601f836124cf565b9150612df682612db5565b602082019050919050565b60006020820190508181036000830152612e1a81612dde565b9050919050565b6000612e2c826125e8565b9150612e37836125e8565b9250828201905080821115612e4f57612e4e612ce6565b5b92915050565b7f45524332303a206275726e20616d6f756e74206e6f742067726561746572207460008201527f68616e2030000000000000000000000000000000000000000000000000000000602082015250565b6000612eb16025836124cf565b9150612ebc82612e55565b604082019050919050565b60006020820190508181036000830152612ee081612ea4565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f436022836124cf565b9150612f4e82612ee7565b604082019050919050565b60006020820190508181036000830152612f7281612f36565b9050919050565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b6000612faf601d836124cf565b9150612fba82612f79565b602082019050919050565b60006020820190508181036000830152612fde81612fa2565b9050919050565b600060c082019050612ffa6000830189612752565b6130076020830188612850565b6130146040830187612850565b6130216060830186612694565b61302e6080830185612694565b61303b60a0830184612694565b979650505050505050565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b600061307c601e836124cf565b915061308782613046565b602082019050919050565b600060208201905081810360008301526130ab8161306f565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b600061310e602e836124cf565b9150613119826130b2565b604082019050919050565b6000602082019050818103600083015261313d81613101565b9050919050565b7f45524332303a206e6577206f776e657220697320746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131a06024836124cf565b91506131ab82613144565b604082019050919050565b600060208201905081810360008301526131cf81613193565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026132387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826131fb565b61324286836131fb565b95508019841693508086168417925050509392505050565b600061327561327061326b846125e8565b6127d6565b6125e8565b9050919050565b6000819050919050565b61328f8361325a565b6132a361329b8261327c565b848454613208565b825550505050565b600090565b6132b86132ab565b6132c3818484613286565b505050565b5b818110156132e7576132dc6000826132b0565b6001810190506132c9565b5050565b601f82111561332c576132fd816131d6565b613306846131eb565b81016020851015613315578190505b613329613321856131eb565b8301826132c8565b50505b505050565b600082821c905092915050565b600061334f60001984600802613331565b1980831691505092915050565b6000613368838361333e565b9150826002028217905092915050565b613381826124c4565b67ffffffffffffffff81111561339a576133996129be565b5b6133a48254612bb7565b6133af8282856132eb565b600060209050601f8311600181146133e257600084156133d0578287015190505b6133da858261335c565b865550613442565b601f1984166133f0866131d6565b60005b82811015613418578489015182556001820191506020850194506020810190506133f3565b868310156134355784890151613431601f89168261333e565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b600061346f61346a6134658461344a565b6127d6565b612711565b9050919050565b61347f81613454565b82525050565b600060208201905061349a6000830184613476565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006134fc6026836124cf565b9150613507826134a0565b604082019050919050565b6000602082019050818103600083015261352b816134ef565b9050919050565b60006040820190506135476000830185612850565b6135546020830184612850565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135b76024836124cf565b91506135c28261355b565b604082019050919050565b600060208201905081810360008301526135e6816135aa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136496022836124cf565b9150613654826135ed565b604082019050919050565b600060208201905081810360008301526136788161363c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136db6025836124cf565b91506136e68261367f565b604082019050919050565b6000602082019050818103600083015261370a816136ce565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061376d6023836124cf565b915061377882613711565b604082019050919050565b6000602082019050818103600083015261379c81613760565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006137ff6026836124cf565b915061380a826137a3565b604082019050919050565b6000602082019050818103600083015261382e816137f2565b9050919050565b600060808201905061384a6000830187612850565b6138576020830186612850565b6138646040830185612850565b6138716060830184612694565b95945050505050565b600060a08201905061388f6000830188612752565b61389c6020830187612752565b6138a96040830186612752565b6138b66060830185612694565b6138c36080830184612850565b9695505050505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b600061390e6002836138cd565b9150613919826138d8565b600282019050919050565b6000819050919050565b61393f61393a82612748565b613924565b82525050565b600061395082613901565b915061395c828561392e565b60208201915061396c828461392e565b6020820191508190509392505050565b60006080820190506139916000830187612752565b61399e602083018661271e565b6139ab6040830185612752565b6139b86060830184612752565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000613a266018836124cf565b9150613a31826139f0565b602082019050919050565b60006020820190508181036000830152613a5581613a19565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000613a92601f836124cf565b9150613a9d82613a5c565b602082019050919050565b60006020820190508181036000830152613ac181613a85565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b246022836124cf565b9150613b2f82613ac8565b604082019050919050565b60006020820190508181036000830152613b5381613b17565b905091905056fea264697066735822122024ca2637a4d227f876347b915ec298d9cc359d0336031a5fb880dcb8f87e055664736f6c63430008120033