Variables
Const AddressZero
AddressZero: "0x0000000000000000000000000000000000000000" = ethers.constants.AddressZero
Const BACKEND_API_ENDPOINT
BACKEND_API_ENDPOINT: "https://rpc.etherspot.io/data-api" = "https://rpc.etherspot.io/data-api"
Const CHAIN_ID_TO_NETWORK_NAME
CHAIN_ID_TO_NETWORK_NAME: {} = Object.entries(NETWORK_NAME_TO_CHAIN_ID,).reduce((result, [networkName, chainId]) => ({...result,[chainId]: networkName,}),{},)
Const DEFAULT_TRANSACTION_TIMEOUT
DEFAULT_TRANSACTION_TIMEOUT: 10000 = 10000
Const DUMMY_PAYMASTER_AND_DATA
DUMMY_PAYMASTER_AND_DATA: "0x0101010101010101010101010101010101010101000000000000000000000000000000000000000000000000000001010101010100000000000000000000000000000000000000000000000000000000000000000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" = "0x0101010101010101010101010101010101010101000000000000000000000000000000000000000000000000000001010101010100000000000000000000000000000000000000000000000000000000000000000101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101"
Const ECDSAKernelFactoryAbi
ECDSAKernelFactoryAbi: [{ inputs: [{ internalType: "contract KernelFactory"; name: "_singletonFactory"; type: "address" }, { internalType: "contract ECDSAValidator"; name: "_validator"; type: "address" }, { internalType: "contract IEntryPoint"; name: "_entryPoint"; type: "address" }]; stateMutability: "nonpayable"; type: "constructor" }, { inputs: [{ internalType: "address"; name: "_owner"; type: "address" }, { internalType: "uint256"; name: "_index"; type: "uint256" }]; name: "createAccount"; outputs: [{ internalType: "contract EIP1967Proxy"; name: "proxy"; type: "address" }]; stateMutability: "nonpayable"; type: "function" }, { inputs: []; name: "entryPoint"; outputs: [{ internalType: "contract IEntryPoint"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "address"; name: "_owner"; type: "address" }, { internalType: "uint256"; name: "_index"; type: "uint256" }]; name: "getAccountAddress"; outputs: [{ internalType: "address"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "singletonFactory"; outputs: [{ internalType: "contract KernelFactory"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "validator"; outputs: [{ internalType: "contract ECDSAValidator"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }] = [{inputs: [{internalType: "contract KernelFactory",name: "_singletonFactory",type: "address",},{internalType: "contract ECDSAValidator",name: "_validator",type: "address",},{internalType: "contract IEntryPoint",name: "_entryPoint",type: "address",},],stateMutability: "nonpayable",type: "constructor",},{inputs: [{internalType: "address",name: "_owner",type: "address",},{internalType: "uint256",name: "_index",type: "uint256",},],name: "createAccount",outputs: [{internalType: "contract EIP1967Proxy",name: "proxy",type: "address",},],stateMutability: "nonpayable",type: "function",},{inputs: [],name: "entryPoint",outputs: [{internalType: "contract IEntryPoint",name: "",type: "address",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "address",name: "_owner",type: "address",},{internalType: "uint256",name: "_index",type: "uint256",},],name: "getAccountAddress",outputs: [{internalType: "address",name: "",type: "address",},],stateMutability: "view",type: "function",},{inputs: [],name: "singletonFactory",outputs: [{internalType: "contract KernelFactory",name: "",type: "address",},],stateMutability: "view",type: "function",},{inputs: [],name: "validator",outputs: [{internalType: "contract ECDSAValidator",name: "",type: "address",},],stateMutability: "view",type: "function",},] as const
Const ERC20_ABI
ERC20_ABI: string[] = ['function balanceOf(address owner) view returns (uint256)','function decimals() view returns (uint8)','function symbol() view returns (string)','function transfer(address to, uint amount) returns (bool)','function approve(address spender, uint256 amount) returns (bool)','function mint(address to, uint256 amount) public','event Transfer(address indexed from, address indexed to, uint amount)',]
Const ErrorSig
ErrorSig: string = keccak256(Buffer.from('Error(string)')).slice(0, 10)
Const FailedOpSig
FailedOpSig: string = keccak256(Buffer.from('FailedOp(uint256,string)')).slice(0, 10)
Const KERNEL_IMPL_ADDRESS
KERNEL_IMPL_ADDRESS: "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb" = "0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb"
Const KERNEL_VALIDATOR_ADDRESS
KERNEL_VALIDATOR_ADDRESS: "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390" = "0xd9AB5096a832b9ce79914329DAEE236f8Eea0390"
Const KernelAccountAbi
KernelAccountAbi: [{ inputs: [{ internalType: "contract IEntryPoint"; name: "_entryPoint"; type: "address" }]; stateMutability: "nonpayable"; type: "constructor" }, { anonymous: false; inputs: [{ indexed: true; internalType: "address"; name: "oldValidator"; type: "address" }, { indexed: true; internalType: "address"; name: "newValidator"; type: "address" }]; name: "DefaultValidatorChanged"; type: "event" }, { anonymous: false; inputs: [{ indexed: true; internalType: "bytes4"; name: "selector"; type: "bytes4" }, { indexed: true; internalType: "address"; name: "executor"; type: "address" }, { indexed: true; internalType: "address"; name: "validator"; type: "address" }]; name: "ExecutionChanged"; type: "event" }, { anonymous: false; inputs: [{ indexed: true; internalType: "address"; name: "newImplementation"; type: "address" }]; name: "Upgraded"; type: "event" }, { stateMutability: "payable"; type: "fallback" }, { inputs: [{ internalType: "bytes4"; name: "_disableFlag"; type: "bytes4" }]; name: "disableMode"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: []; name: "entryPoint"; outputs: [{ internalType: "contract IEntryPoint"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "address"; name: "to"; type: "address" }, { internalType: "uint256"; name: "value"; type: "uint256" }, { internalType: "bytes"; name: "data"; type: "bytes" }, { internalType: "enum Operation"; name: "operation"; type: "uint8" }]; name: "execute"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: []; name: "getDefaultValidator"; outputs: [{ internalType: "contract IKernelValidator"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "getDisabledMode"; outputs: [{ internalType: "bytes4"; name: ""; type: "bytes4" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "bytes4"; name: "_selector"; type: "bytes4" }]; name: "getExecution"; outputs: [{ components: [{ internalType: "uint48"; name: "validUntil"; type: "uint48" }, { internalType: "uint48"; name: "validAfter"; type: "uint48" }, { internalType: "address"; name: "executor"; type: "address" }, { internalType: "contract IKernelValidator"; name: "validator"; type: "address" }]; internalType: "struct ExecutionDetail"; name: ""; type: "tuple" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "getLastDisabledTime"; outputs: [{ internalType: "uint48"; name: ""; type: "uint48" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "uint192"; name: "key"; type: "uint192" }]; name: "getNonce"; outputs: [{ internalType: "uint256"; name: ""; type: "uint256" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "getNonce"; outputs: [{ internalType: "uint256"; name: ""; type: "uint256" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "contract IKernelValidator"; name: "_defaultValidator"; type: "address" }, { internalType: "bytes"; name: "_data"; type: "bytes" }]; name: "initialize"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "bytes32"; name: "hash"; type: "bytes32" }, { internalType: "bytes"; name: "signature"; type: "bytes" }]; name: "isValidSignature"; outputs: [{ internalType: "bytes4"; name: ""; type: "bytes4" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "name"; outputs: [{ internalType: "string"; name: ""; type: "string" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "address"; name: ""; type: "address" }, { internalType: "address"; name: ""; type: "address" }, { internalType: "uint256[]"; name: ""; type: "uint256[]" }, { internalType: "uint256[]"; name: ""; type: "uint256[]" }, { internalType: "bytes"; name: ""; type: "bytes" }]; name: "onERC1155BatchReceived"; outputs: [{ internalType: "bytes4"; name: ""; type: "bytes4" }]; stateMutability: "pure"; type: "function" }, { inputs: [{ internalType: "address"; name: ""; type: "address" }, { internalType: "address"; name: ""; type: "address" }, { internalType: "uint256"; name: ""; type: "uint256" }, { internalType: "uint256"; name: ""; type: "uint256" }, { internalType: "bytes"; name: ""; type: "bytes" }]; name: "onERC1155Received"; outputs: [{ internalType: "bytes4"; name: ""; type: "bytes4" }]; stateMutability: "pure"; type: "function" }, { inputs: [{ internalType: "address"; name: ""; type: "address" }, { internalType: "address"; name: ""; type: "address" }, { internalType: "uint256"; name: ""; type: "uint256" }, { internalType: "bytes"; name: ""; type: "bytes" }]; name: "onERC721Received"; outputs: [{ internalType: "bytes4"; name: ""; type: "bytes4" }]; stateMutability: "pure"; type: "function" }, { inputs: [{ internalType: "contract IKernelValidator"; name: "_defaultValidator"; type: "address" }, { internalType: "bytes"; name: "_data"; type: "bytes" }]; name: "setDefaultValidator"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "bytes4"; name: "_selector"; type: "bytes4" }, { internalType: "address"; name: "_executor"; type: "address" }, { internalType: "contract IKernelValidator"; name: "_validator"; type: "address" }, { internalType: "uint48"; name: "_validUntil"; type: "uint48" }, { internalType: "uint48"; name: "_validAfter"; type: "uint48" }, { internalType: "bytes"; name: "_enableData"; type: "bytes" }]; name: "setExecution"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "address"; name: "_newImplementation"; type: "address" }]; name: "upgradeTo"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ components: [{ internalType: "address"; name: "sender"; type: "address" }, { internalType: "uint256"; name: "nonce"; type: "uint256" }, { internalType: "bytes"; name: "initCode"; type: "bytes" }, { internalType: "bytes"; name: "callData"; type: "bytes" }, { internalType: "uint256"; name: "callGasLimit"; type: "uint256" }, { internalType: "uint256"; name: "verificationGasLimit"; type: "uint256" }, { internalType: "uint256"; name: "preVerificationGas"; type: "uint256" }, { internalType: "uint256"; name: "maxFeePerGas"; type: "uint256" }, { internalType: "uint256"; name: "maxPriorityFeePerGas"; type: "uint256" }, { internalType: "bytes"; name: "paymasterAndData"; type: "bytes" }, { internalType: "bytes"; name: "signature"; type: "bytes" }]; internalType: "struct UserOperation"; name: "userOp"; type: "tuple" }, { internalType: "bytes32"; name: "userOpHash"; type: "bytes32" }, { internalType: "uint256"; name: "missingAccountFunds"; type: "uint256" }]; name: "validateUserOp"; outputs: [{ internalType: "uint256"; name: "validationData"; type: "uint256" }]; stateMutability: "nonpayable"; type: "function" }, { inputs: []; name: "version"; outputs: [{ internalType: "string"; name: ""; type: "string" }]; stateMutability: "view"; type: "function" }, { stateMutability: "payable"; type: "receive" }] = [{"inputs": [{"internalType": "contract IEntryPoint","name": "_entryPoint","type": "address"}],"stateMutability": "nonpayable","type": "constructor"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "oldValidator","type": "address"},{"indexed": true,"internalType": "address","name": "newValidator","type": "address"}],"name": "DefaultValidatorChanged","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "bytes4","name": "selector","type": "bytes4"},{"indexed": true,"internalType": "address","name": "executor","type": "address"},{"indexed": true,"internalType": "address","name": "validator","type": "address"}],"name": "ExecutionChanged","type": "event"},{"anonymous": false,"inputs": [{"indexed": true,"internalType": "address","name": "newImplementation","type": "address"}],"name": "Upgraded","type": "event"},{"stateMutability": "payable","type": "fallback"},{"inputs": [{"internalType": "bytes4","name": "_disableFlag","type": "bytes4"}],"name": "disableMode","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "entryPoint","outputs": [{"internalType": "contract IEntryPoint","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "to","type": "address"},{"internalType": "uint256","name": "value","type": "uint256"},{"internalType": "bytes","name": "data","type": "bytes"},{"internalType": "enum Operation","name": "operation","type": "uint8"}],"name": "execute","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "getDefaultValidator","outputs": [{"internalType": "contract IKernelValidator","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "getDisabledMode","outputs": [{"internalType": "bytes4","name": "","type": "bytes4"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "bytes4","name": "_selector","type": "bytes4"}],"name": "getExecution","outputs": [{"components": [{"internalType": "uint48","name": "validUntil","type": "uint48"},{"internalType": "uint48","name": "validAfter","type": "uint48"},{"internalType": "address","name": "executor","type": "address"},{"internalType": "contract IKernelValidator","name": "validator","type": "address"}],"internalType": "struct ExecutionDetail","name": "","type": "tuple"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "getLastDisabledTime","outputs": [{"internalType": "uint48","name": "","type": "uint48"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "uint192","name": "key","type": "uint192"}],"name": "getNonce","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "getNonce","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "contract IKernelValidator","name": "_defaultValidator","type": "address"},{"internalType": "bytes","name": "_data","type": "bytes"}],"name": "initialize","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "bytes32","name": "hash","type": "bytes32"},{"internalType": "bytes","name": "signature","type": "bytes"}],"name": "isValidSignature","outputs": [{"internalType": "bytes4","name": "","type": "bytes4"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "name","outputs": [{"internalType": "string","name": "","type": "string"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "address","name": "","type": "address"},{"internalType": "address","name": "","type": "address"},{"internalType": "uint256[]","name": "","type": "uint256[]"},{"internalType": "uint256[]","name": "","type": "uint256[]"},{"internalType": "bytes","name": "","type": "bytes"}],"name": "onERC1155BatchReceived","outputs": [{"internalType": "bytes4","name": "","type": "bytes4"}],"stateMutability": "pure","type": "function"},{"inputs": [{"internalType": "address","name": "","type": "address"},{"internalType": "address","name": "","type": "address"},{"internalType": "uint256","name": "","type": "uint256"},{"internalType": "uint256","name": "","type": "uint256"},{"internalType": "bytes","name": "","type": "bytes"}],"name": "onERC1155Received","outputs": [{"internalType": "bytes4","name": "","type": "bytes4"}],"stateMutability": "pure","type": "function"},{"inputs": [{"internalType": "address","name": "","type": "address"},{"internalType": "address","name": "","type": "address"},{"internalType": "uint256","name": "","type": "uint256"},{"internalType": "bytes","name": "","type": "bytes"}],"name": "onERC721Received","outputs": [{"internalType": "bytes4","name": "","type": "bytes4"}],"stateMutability": "pure","type": "function"},{"inputs": [{"internalType": "contract IKernelValidator","name": "_defaultValidator","type": "address"},{"internalType": "bytes","name": "_data","type": "bytes"}],"name": "setDefaultValidator","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "bytes4","name": "_selector","type": "bytes4"},{"internalType": "address","name": "_executor","type": "address"},{"internalType": "contract IKernelValidator","name": "_validator","type": "address"},{"internalType": "uint48","name": "_validUntil","type": "uint48"},{"internalType": "uint48","name": "_validAfter","type": "uint48"},{"internalType": "bytes","name": "_enableData","type": "bytes"}],"name": "setExecution","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "address","name": "_newImplementation","type": "address"}],"name": "upgradeTo","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"components": [{"internalType": "address","name": "sender","type": "address"},{"internalType": "uint256","name": "nonce","type": "uint256"},{"internalType": "bytes","name": "initCode","type": "bytes"},{"internalType": "bytes","name": "callData","type": "bytes"},{"internalType": "uint256","name": "callGasLimit","type": "uint256"},{"internalType": "uint256","name": "verificationGasLimit","type": "uint256"},{"internalType": "uint256","name": "preVerificationGas","type": "uint256"},{"internalType": "uint256","name": "maxFeePerGas","type": "uint256"},{"internalType": "uint256","name": "maxPriorityFeePerGas","type": "uint256"},{"internalType": "bytes","name": "paymasterAndData","type": "bytes"},{"internalType": "bytes","name": "signature","type": "bytes"}],"internalType": "struct UserOperation","name": "userOp","type": "tuple"},{"internalType": "bytes32","name": "userOpHash","type": "bytes32"},{"internalType": "uint256","name": "missingAccountFunds","type": "uint256"}],"name": "validateUserOp","outputs": [{"internalType": "uint256","name": "validationData","type": "uint256"}],"stateMutability": "nonpayable","type": "function"},{"inputs": [],"name": "version","outputs": [{"internalType": "string","name": "","type": "string"}],"stateMutability": "view","type": "function"},{"stateMutability": "payable","type": "receive"}] as const
Const KernelFactoryAbi
KernelFactoryAbi: [{ inputs: [{ internalType: "address"; name: "_owner"; type: "address" }, { internalType: "contract IEntryPoint"; name: "_entryPoint"; type: "address" }]; stateMutability: "nonpayable"; type: "constructor" }, { inputs: []; name: "DeploymentFailed"; type: "error" }, { inputs: []; name: "NewOwnerIsZeroAddress"; type: "error" }, { inputs: []; name: "NoHandoverRequest"; type: "error" }, { inputs: []; name: "SaltDoesNotStartWithCaller"; type: "error" }, { inputs: []; name: "Unauthorized"; type: "error" }, { anonymous: false; inputs: [{ indexed: true; internalType: "address"; name: "proxy"; type: "address" }, { indexed: true; internalType: "address"; name: "implementation"; type: "address" }]; name: "Deployed"; type: "event" }, { anonymous: false; inputs: [{ indexed: true; internalType: "address"; name: "pendingOwner"; type: "address" }]; name: "OwnershipHandoverCanceled"; type: "event" }, { anonymous: false; inputs: [{ indexed: true; internalType: "address"; name: "pendingOwner"; type: "address" }]; name: "OwnershipHandoverRequested"; type: "event" }, { anonymous: false; inputs: [{ indexed: true; internalType: "address"; name: "oldOwner"; type: "address" }, { indexed: true; internalType: "address"; name: "newOwner"; type: "address" }]; name: "OwnershipTransferred"; type: "event" }, { inputs: [{ internalType: "uint32"; name: "unstakeDelaySec"; type: "uint32" }]; name: "addStake"; outputs: []; stateMutability: "payable"; type: "function" }, { inputs: []; name: "cancelOwnershipHandover"; outputs: []; stateMutability: "payable"; type: "function" }, { inputs: [{ internalType: "address"; name: "pendingOwner"; type: "address" }]; name: "completeOwnershipHandover"; outputs: []; stateMutability: "payable"; type: "function" }, { inputs: [{ internalType: "address"; name: "_implementation"; type: "address" }, { internalType: "bytes"; name: "_data"; type: "bytes" }, { internalType: "uint256"; name: "_index"; type: "uint256" }]; name: "createAccount"; outputs: [{ internalType: "address"; name: "proxy"; type: "address" }]; stateMutability: "payable"; type: "function" }, { inputs: []; name: "entryPoint"; outputs: [{ internalType: "contract IEntryPoint"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "bytes"; name: "_data"; type: "bytes" }, { internalType: "uint256"; name: "_index"; type: "uint256" }]; name: "getAccountAddress"; outputs: [{ internalType: "address"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "initCodeHash"; outputs: [{ internalType: "bytes32"; name: "result"; type: "bytes32" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "address"; name: ""; type: "address" }]; name: "isAllowedImplementation"; outputs: [{ internalType: "bool"; name: ""; type: "bool" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "owner"; outputs: [{ internalType: "address"; name: "result"; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "address"; name: "pendingOwner"; type: "address" }]; name: "ownershipHandoverExpiresAt"; outputs: [{ internalType: "uint256"; name: "result"; type: "uint256" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "ownershipHandoverValidFor"; outputs: [{ internalType: "uint64"; name: ""; type: "uint64" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "bytes32"; name: "salt"; type: "bytes32" }]; name: "predictDeterministicAddress"; outputs: [{ internalType: "address"; name: "predicted"; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "renounceOwnership"; outputs: []; stateMutability: "payable"; type: "function" }, { inputs: []; name: "requestOwnershipHandover"; outputs: []; stateMutability: "payable"; type: "function" }, { inputs: [{ internalType: "contract IEntryPoint"; name: "_entryPoint"; type: "address" }]; name: "setEntryPoint"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "address"; name: "_implementation"; type: "address" }, { internalType: "bool"; name: "_allow"; type: "bool" }]; name: "setImplementation"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "address"; name: "newOwner"; type: "address" }]; name: "transferOwnership"; outputs: []; stateMutability: "payable"; type: "function" }, { inputs: []; name: "unlockStake"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "address payable"; name: "withdrawAddress"; type: "address" }]; name: "withdrawStake"; outputs: []; stateMutability: "nonpayable"; type: "function" }] = [{inputs: [{internalType: "address",name: "_owner",type: "address",},{internalType: "contract IEntryPoint",name: "_entryPoint",type: "address",},],stateMutability: "nonpayable",type: "constructor",},{inputs: [],name: "DeploymentFailed",type: "error",},{inputs: [],name: "NewOwnerIsZeroAddress",type: "error",},{inputs: [],name: "NoHandoverRequest",type: "error",},{inputs: [],name: "SaltDoesNotStartWithCaller",type: "error",},{inputs: [],name: "Unauthorized",type: "error",},{anonymous: false,inputs: [{indexed: true,internalType: "address",name: "proxy",type: "address",},{indexed: true,internalType: "address",name: "implementation",type: "address",},],name: "Deployed",type: "event",},{anonymous: false,inputs: [{indexed: true,internalType: "address",name: "pendingOwner",type: "address",},],name: "OwnershipHandoverCanceled",type: "event",},{anonymous: false,inputs: [{indexed: true,internalType: "address",name: "pendingOwner",type: "address",},],name: "OwnershipHandoverRequested",type: "event",},{anonymous: false,inputs: [{indexed: true,internalType: "address",name: "oldOwner",type: "address",},{indexed: true,internalType: "address",name: "newOwner",type: "address",},],name: "OwnershipTransferred",type: "event",},{inputs: [{internalType: "uint32",name: "unstakeDelaySec",type: "uint32",},],name: "addStake",outputs: [],stateMutability: "payable",type: "function",},{inputs: [],name: "cancelOwnershipHandover",outputs: [],stateMutability: "payable",type: "function",},{inputs: [{internalType: "address",name: "pendingOwner",type: "address",},],name: "completeOwnershipHandover",outputs: [],stateMutability: "payable",type: "function",},{inputs: [{internalType: "address",name: "_implementation",type: "address",},{internalType: "bytes",name: "_data",type: "bytes",},{internalType: "uint256",name: "_index",type: "uint256",},],name: "createAccount",outputs: [{internalType: "address",name: "proxy",type: "address",},],stateMutability: "payable",type: "function",},{inputs: [],name: "entryPoint",outputs: [{internalType: "contract IEntryPoint",name: "",type: "address",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "bytes",name: "_data",type: "bytes",},{internalType: "uint256",name: "_index",type: "uint256",},],name: "getAccountAddress",outputs: [{internalType: "address",name: "",type: "address",},],stateMutability: "view",type: "function",},{inputs: [],name: "initCodeHash",outputs: [{internalType: "bytes32",name: "result",type: "bytes32",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "address",name: "",type: "address",},],name: "isAllowedImplementation",outputs: [{internalType: "bool",name: "",type: "bool",},],stateMutability: "view",type: "function",},{inputs: [],name: "owner",outputs: [{internalType: "address",name: "result",type: "address",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "address",name: "pendingOwner",type: "address",},],name: "ownershipHandoverExpiresAt",outputs: [{internalType: "uint256",name: "result",type: "uint256",},],stateMutability: "view",type: "function",},{inputs: [],name: "ownershipHandoverValidFor",outputs: [{internalType: "uint64",name: "",type: "uint64",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "bytes32",name: "salt",type: "bytes32",},],name: "predictDeterministicAddress",outputs: [{internalType: "address",name: "predicted",type: "address",},],stateMutability: "view",type: "function",},{inputs: [],name: "renounceOwnership",outputs: [],stateMutability: "payable",type: "function",},{inputs: [],name: "requestOwnershipHandover",outputs: [],stateMutability: "payable",type: "function",},{inputs: [{internalType: "contract IEntryPoint",name: "_entryPoint",type: "address",},],name: "setEntryPoint",outputs: [],stateMutability: "nonpayable",type: "function",},{inputs: [{internalType: "address",name: "_implementation",type: "address",},{internalType: "bool",name: "_allow",type: "bool",},],name: "setImplementation",outputs: [],stateMutability: "nonpayable",type: "function",},{inputs: [{internalType: "address",name: "newOwner",type: "address",},],name: "transferOwnership",outputs: [],stateMutability: "payable",type: "function",},{inputs: [],name: "unlockStake",outputs: [],stateMutability: "nonpayable",type: "function",},{inputs: [{internalType: "address payable",name: "withdrawAddress",type: "address",},],name: "withdrawStake",outputs: [],stateMutability: "nonpayable",type: "function",},] as const
Const MultiSendAbi
MultiSendAbi: [{ inputs: []; stateMutability: "nonpayable"; type: "constructor" }, { inputs: [{ internalType: "bytes"; name: "transactions"; type: "bytes" }]; name: "multiSend"; outputs: []; stateMutability: "payable"; type: "function" }] = [{inputs: [],stateMutability: "nonpayable",type: "constructor",},{inputs: [{internalType: "bytes",name: "transactions",type: "bytes",},],name: "multiSend",outputs: [],stateMutability: "payable",type: "function",},] as const
Const SWAP_ROUTER_ABI
SWAP_ROUTER_ABI: ({ inputs: { internalType: string; name: string; type: string }[]; stateMutability: string; type: string } | { inputs: { components: { internalType: string; name: string; type: string }[]; internalType: string; name: string; type: string }[]; name: string; outputs: { internalType: string; name: string; type: string }[]; stateMutability: string; type: string } | { inputs: { internalType: string; name: string; type: string }[]; name: string; outputs: { internalType: string; name: string; type: string }[]; stateMutability: string; type: string } | { stateMutability: string; type: string })[] = [{inputs: [{ internalType: 'address', name: '_factory', type: 'address' },{ internalType: 'address', name: '_WETH9', type: 'address' },],stateMutability: 'nonpayable',type: 'constructor',},{inputs: [],name: 'WETH9',outputs: [{ internalType: 'address', name: '', type: 'address' }],stateMutability: 'view',type: 'function',},{inputs: [{components: [{ internalType: 'bytes', name: 'path', type: 'bytes' },{ internalType: 'address', name: 'recipient', type: 'address' },{ internalType: 'uint256', name: 'deadline', type: 'uint256' },{ internalType: 'uint256', name: 'amountIn', type: 'uint256' },{ internalType: 'uint256', name: 'amountOutMinimum', type: 'uint256' },],internalType: 'struct ISwapRouter.ExactInputParams',name: 'params',type: 'tuple',},],name: 'exactInput',outputs: [{ internalType: 'uint256', name: 'amountOut', type: 'uint256' }],stateMutability: 'payable',type: 'function',},{inputs: [{components: [{ internalType: 'address', name: 'tokenIn', type: 'address' },{ internalType: 'address', name: 'tokenOut', type: 'address' },{ internalType: 'uint24', name: 'fee', type: 'uint24' },{ internalType: 'address', name: 'recipient', type: 'address' },{ internalType: 'uint256', name: 'deadline', type: 'uint256' },{ internalType: 'uint256', name: 'amountIn', type: 'uint256' },{ internalType: 'uint256', name: 'amountOutMinimum', type: 'uint256' },{ internalType: 'uint160', name: 'sqrtPriceLimitX96', type: 'uint160' },],internalType: 'struct ISwapRouter.ExactInputSingleParams',name: 'params',type: 'tuple',},],name: 'exactInputSingle',outputs: [{ internalType: 'uint256', name: 'amountOut', type: 'uint256' }],stateMutability: 'payable',type: 'function',},{inputs: [{components: [{ internalType: 'bytes', name: 'path', type: 'bytes' },{ internalType: 'address', name: 'recipient', type: 'address' },{ internalType: 'uint256', name: 'deadline', type: 'uint256' },{ internalType: 'uint256', name: 'amountOut', type: 'uint256' },{ internalType: 'uint256', name: 'amountInMaximum', type: 'uint256' },],internalType: 'struct ISwapRouter.ExactOutputParams',name: 'params',type: 'tuple',},],name: 'exactOutput',outputs: [{ internalType: 'uint256', name: 'amountIn', type: 'uint256' }],stateMutability: 'payable',type: 'function',},{inputs: [{components: [{ internalType: 'address', name: 'tokenIn', type: 'address' },{ internalType: 'address', name: 'tokenOut', type: 'address' },{ internalType: 'uint24', name: 'fee', type: 'uint24' },{ internalType: 'address', name: 'recipient', type: 'address' },{ internalType: 'uint256', name: 'deadline', type: 'uint256' },{ internalType: 'uint256', name: 'amountOut', type: 'uint256' },{ internalType: 'uint256', name: 'amountInMaximum', type: 'uint256' },{ internalType: 'uint160', name: 'sqrtPriceLimitX96', type: 'uint160' },],internalType: 'struct ISwapRouter.ExactOutputSingleParams',name: 'params',type: 'tuple',},],name: 'exactOutputSingle',outputs: [{ internalType: 'uint256', name: 'amountIn', type: 'uint256' }],stateMutability: 'payable',type: 'function',},{inputs: [],name: 'factory',outputs: [{ internalType: 'address', name: '', type: 'address' }],stateMutability: 'view',type: 'function',},{inputs: [{ internalType: 'bytes[]', name: 'data', type: 'bytes[]' }],name: 'multicall',outputs: [{ internalType: 'bytes[]', name: 'results', type: 'bytes[]' }],stateMutability: 'payable',type: 'function',},{ inputs: [], name: 'refundETH', outputs: [], stateMutability: 'payable', type: 'function' },{inputs: [{ internalType: 'address', name: 'token', type: 'address' },{ internalType: 'uint256', name: 'value', type: 'uint256' },{ internalType: 'uint256', name: 'deadline', type: 'uint256' },{ internalType: 'uint8', name: 'v', type: 'uint8' },{ internalType: 'bytes32', name: 'r', type: 'bytes32' },{ internalType: 'bytes32', name: 's', type: 'bytes32' },],name: 'selfPermit',outputs: [],stateMutability: 'payable',type: 'function',},{inputs: [{ internalType: 'address', name: 'token', type: 'address' },{ internalType: 'uint256', name: 'nonce', type: 'uint256' },{ internalType: 'uint256', name: 'expiry', type: 'uint256' },{ internalType: 'uint8', name: 'v', type: 'uint8' },{ internalType: 'bytes32', name: 'r', type: 'bytes32' },{ internalType: 'bytes32', name: 's', type: 'bytes32' },],name: 'selfPermitAllowed',outputs: [],stateMutability: 'payable',type: 'function',},{inputs: [{ internalType: 'address', name: 'token', type: 'address' },{ internalType: 'uint256', name: 'nonce', type: 'uint256' },{ internalType: 'uint256', name: 'expiry', type: 'uint256' },{ internalType: 'uint8', name: 'v', type: 'uint8' },{ internalType: 'bytes32', name: 'r', type: 'bytes32' },{ internalType: 'bytes32', name: 's', type: 'bytes32' },],name: 'selfPermitAllowedIfNecessary',outputs: [],stateMutability: 'payable',type: 'function',},{inputs: [{ internalType: 'address', name: 'token', type: 'address' },{ internalType: 'uint256', name: 'value', type: 'uint256' },{ internalType: 'uint256', name: 'deadline', type: 'uint256' },{ internalType: 'uint8', name: 'v', type: 'uint8' },{ internalType: 'bytes32', name: 'r', type: 'bytes32' },{ internalType: 'bytes32', name: 's', type: 'bytes32' },],name: 'selfPermitIfNecessary',outputs: [],stateMutability: 'payable',type: 'function',},{inputs: [{ internalType: 'address', name: 'token', type: 'address' },{ internalType: 'uint256', name: 'amountMinimum', type: 'uint256' },{ internalType: 'address', name: 'recipient', type: 'address' },],name: 'sweepToken',outputs: [],stateMutability: 'payable',type: 'function',},{inputs: [{ internalType: 'address', name: 'token', type: 'address' },{ internalType: 'uint256', name: 'amountMinimum', type: 'uint256' },{ internalType: 'address', name: 'recipient', type: 'address' },{ internalType: 'uint256', name: 'feeBips', type: 'uint256' },{ internalType: 'address', name: 'feeRecipient', type: 'address' },],name: 'sweepTokenWithFee',outputs: [],stateMutability: 'payable',type: 'function',},{inputs: [{ internalType: 'int256', name: 'amount0Delta', type: 'int256' },{ internalType: 'int256', name: 'amount1Delta', type: 'int256' },{ internalType: 'bytes', name: '_data', type: 'bytes' },],name: 'uniswapV3SwapCallback',outputs: [],stateMutability: 'nonpayable',type: 'function',},{inputs: [{ internalType: 'uint256', name: 'amountMinimum', type: 'uint256' },{ internalType: 'address', name: 'recipient', type: 'address' },],name: 'unwrapWETH9',outputs: [],stateMutability: 'payable',type: 'function',},{inputs: [{ internalType: 'uint256', name: 'amountMinimum', type: 'uint256' },{ internalType: 'address', name: 'recipient', type: 'address' },{ internalType: 'uint256', name: 'feeBips', type: 'uint256' },{ internalType: 'address', name: 'feeRecipient', type: 'address' },],name: 'unwrapWETH9WithFee',outputs: [],stateMutability: 'payable',type: 'function',},{ stateMutability: 'payable', type: 'receive' },]
Const SimpleAccountAbi
SimpleAccountAbi: [{ inputs: [{ internalType: "contract IEntryPoint"; name: "anEntryPoint"; type: "address" }]; stateMutability: "nonpayable"; type: "constructor" }, { anonymous: false; inputs: [{ indexed: false; internalType: "address"; name: "previousAdmin"; type: "address" }, { indexed: false; internalType: "address"; name: "newAdmin"; type: "address" }]; name: "AdminChanged"; type: "event" }, { anonymous: false; inputs: [{ indexed: true; internalType: "address"; name: "beacon"; type: "address" }]; name: "BeaconUpgraded"; type: "event" }, { anonymous: false; inputs: [{ indexed: false; internalType: "uint8"; name: "version"; type: "uint8" }]; name: "Initialized"; type: "event" }, { anonymous: false; inputs: [{ indexed: true; internalType: "contract IEntryPoint"; name: "entryPoint"; type: "address" }, { indexed: true; internalType: "address"; name: "owner"; type: "address" }]; name: "SimpleAccountInitialized"; type: "event" }, { anonymous: false; inputs: [{ indexed: true; internalType: "address"; name: "implementation"; type: "address" }]; name: "Upgraded"; type: "event" }, { inputs: []; name: "addDeposit"; outputs: []; stateMutability: "payable"; type: "function" }, { inputs: []; name: "entryPoint"; outputs: [{ internalType: "contract IEntryPoint"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "address"; name: "dest"; type: "address" }, { internalType: "uint256"; name: "value"; type: "uint256" }, { internalType: "bytes"; name: "func"; type: "bytes" }]; name: "execute"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "address[]"; name: "dest"; type: "address[]" }, { internalType: "bytes[]"; name: "func"; type: "bytes[]" }]; name: "executeBatch"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: []; name: "getDeposit"; outputs: [{ internalType: "uint256"; name: ""; type: "uint256" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "getNonce"; outputs: [{ internalType: "uint256"; name: ""; type: "uint256" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "address"; name: "anOwner"; type: "address" }]; name: "initialize"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "address"; name: ""; type: "address" }, { internalType: "address"; name: ""; type: "address" }, { internalType: "uint256[]"; name: ""; type: "uint256[]" }, { internalType: "uint256[]"; name: ""; type: "uint256[]" }, { internalType: "bytes"; name: ""; type: "bytes" }]; name: "onERC1155BatchReceived"; outputs: [{ internalType: "bytes4"; name: ""; type: "bytes4" }]; stateMutability: "pure"; type: "function" }, { inputs: [{ internalType: "address"; name: ""; type: "address" }, { internalType: "address"; name: ""; type: "address" }, { internalType: "uint256"; name: ""; type: "uint256" }, { internalType: "uint256"; name: ""; type: "uint256" }, { internalType: "bytes"; name: ""; type: "bytes" }]; name: "onERC1155Received"; outputs: [{ internalType: "bytes4"; name: ""; type: "bytes4" }]; stateMutability: "pure"; type: "function" }, { inputs: [{ internalType: "address"; name: ""; type: "address" }, { internalType: "address"; name: ""; type: "address" }, { internalType: "uint256"; name: ""; type: "uint256" }, { internalType: "bytes"; name: ""; type: "bytes" }]; name: "onERC721Received"; outputs: [{ internalType: "bytes4"; name: ""; type: "bytes4" }]; stateMutability: "pure"; type: "function" }, { inputs: []; name: "owner"; outputs: [{ internalType: "address"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: []; name: "proxiableUUID"; outputs: [{ internalType: "bytes32"; name: ""; type: "bytes32" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "bytes4"; name: "interfaceId"; type: "bytes4" }]; name: "supportsInterface"; outputs: [{ internalType: "bool"; name: ""; type: "bool" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "address"; name: ""; type: "address" }, { internalType: "address"; name: ""; type: "address" }, { internalType: "address"; name: ""; type: "address" }, { internalType: "uint256"; name: ""; type: "uint256" }, { internalType: "bytes"; name: ""; type: "bytes" }, { internalType: "bytes"; name: ""; type: "bytes" }]; name: "tokensReceived"; outputs: []; stateMutability: "pure"; type: "function" }, { inputs: [{ internalType: "address"; name: "newImplementation"; type: "address" }]; name: "upgradeTo"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "address"; name: "newImplementation"; type: "address" }, { internalType: "bytes"; name: "data"; type: "bytes" }]; name: "upgradeToAndCall"; outputs: []; stateMutability: "payable"; type: "function" }, { inputs: [{ components: [{ internalType: "address"; name: "sender"; type: "address" }, { internalType: "uint256"; name: "nonce"; type: "uint256" }, { internalType: "bytes"; name: "initCode"; type: "bytes" }, { internalType: "bytes"; name: "callData"; type: "bytes" }, { internalType: "uint256"; name: "callGasLimit"; type: "uint256" }, { internalType: "uint256"; name: "verificationGasLimit"; type: "uint256" }, { internalType: "uint256"; name: "preVerificationGas"; type: "uint256" }, { internalType: "uint256"; name: "maxFeePerGas"; type: "uint256" }, { internalType: "uint256"; name: "maxPriorityFeePerGas"; type: "uint256" }, { internalType: "bytes"; name: "paymasterAndData"; type: "bytes" }, { internalType: "bytes"; name: "signature"; type: "bytes" }]; internalType: "struct UserOperation"; name: "userOp"; type: "tuple" }, { internalType: "bytes32"; name: "userOpHash"; type: "bytes32" }, { internalType: "uint256"; name: "missingAccountFunds"; type: "uint256" }]; name: "validateUserOp"; outputs: [{ internalType: "uint256"; name: "validationData"; type: "uint256" }]; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "address payable"; name: "withdrawAddress"; type: "address" }, { internalType: "uint256"; name: "amount"; type: "uint256" }]; name: "withdrawDepositTo"; outputs: []; stateMutability: "nonpayable"; type: "function" }, { stateMutability: "payable"; type: "receive" }] = [{inputs: [{internalType: "contract IEntryPoint",name: "anEntryPoint",type: "address",},],stateMutability: "nonpayable",type: "constructor",},{anonymous: false,inputs: [{indexed: false,internalType: "address",name: "previousAdmin",type: "address",},{indexed: false,internalType: "address",name: "newAdmin",type: "address",},],name: "AdminChanged",type: "event",},{anonymous: false,inputs: [{indexed: true,internalType: "address",name: "beacon",type: "address",},],name: "BeaconUpgraded",type: "event",},{anonymous: false,inputs: [{indexed: false,internalType: "uint8",name: "version",type: "uint8",},],name: "Initialized",type: "event",},{anonymous: false,inputs: [{indexed: true,internalType: "contract IEntryPoint",name: "entryPoint",type: "address",},{indexed: true,internalType: "address",name: "owner",type: "address",},],name: "SimpleAccountInitialized",type: "event",},{anonymous: false,inputs: [{indexed: true,internalType: "address",name: "implementation",type: "address",},],name: "Upgraded",type: "event",},{inputs: [],name: "addDeposit",outputs: [],stateMutability: "payable",type: "function",},{inputs: [],name: "entryPoint",outputs: [{internalType: "contract IEntryPoint",name: "",type: "address",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "address",name: "dest",type: "address",},{internalType: "uint256",name: "value",type: "uint256",},{internalType: "bytes",name: "func",type: "bytes",},],name: "execute",outputs: [],stateMutability: "nonpayable",type: "function",},{inputs: [{internalType: "address[]",name: "dest",type: "address[]",},{internalType: "bytes[]",name: "func",type: "bytes[]",},],name: "executeBatch",outputs: [],stateMutability: "nonpayable",type: "function",},{inputs: [],name: "getDeposit",outputs: [{internalType: "uint256",name: "",type: "uint256",},],stateMutability: "view",type: "function",},{inputs: [],name: "getNonce",outputs: [{internalType: "uint256",name: "",type: "uint256",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "address",name: "anOwner",type: "address",},],name: "initialize",outputs: [],stateMutability: "nonpayable",type: "function",},{inputs: [{internalType: "address",name: "",type: "address",},{internalType: "address",name: "",type: "address",},{internalType: "uint256[]",name: "",type: "uint256[]",},{internalType: "uint256[]",name: "",type: "uint256[]",},{internalType: "bytes",name: "",type: "bytes",},],name: "onERC1155BatchReceived",outputs: [{internalType: "bytes4",name: "",type: "bytes4",},],stateMutability: "pure",type: "function",},{inputs: [{internalType: "address",name: "",type: "address",},{internalType: "address",name: "",type: "address",},{internalType: "uint256",name: "",type: "uint256",},{internalType: "uint256",name: "",type: "uint256",},{internalType: "bytes",name: "",type: "bytes",},],name: "onERC1155Received",outputs: [{internalType: "bytes4",name: "",type: "bytes4",},],stateMutability: "pure",type: "function",},{inputs: [{internalType: "address",name: "",type: "address",},{internalType: "address",name: "",type: "address",},{internalType: "uint256",name: "",type: "uint256",},{internalType: "bytes",name: "",type: "bytes",},],name: "onERC721Received",outputs: [{internalType: "bytes4",name: "",type: "bytes4",},],stateMutability: "pure",type: "function",},{inputs: [],name: "owner",outputs: [{internalType: "address",name: "",type: "address",},],stateMutability: "view",type: "function",},{inputs: [],name: "proxiableUUID",outputs: [{internalType: "bytes32",name: "",type: "bytes32",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "bytes4",name: "interfaceId",type: "bytes4",},],name: "supportsInterface",outputs: [{internalType: "bool",name: "",type: "bool",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "address",name: "",type: "address",},{internalType: "address",name: "",type: "address",},{internalType: "address",name: "",type: "address",},{internalType: "uint256",name: "",type: "uint256",},{internalType: "bytes",name: "",type: "bytes",},{internalType: "bytes",name: "",type: "bytes",},],name: "tokensReceived",outputs: [],stateMutability: "pure",type: "function",},{inputs: [{internalType: "address",name: "newImplementation",type: "address",},],name: "upgradeTo",outputs: [],stateMutability: "nonpayable",type: "function",},{inputs: [{internalType: "address",name: "newImplementation",type: "address",},{internalType: "bytes",name: "data",type: "bytes",},],name: "upgradeToAndCall",outputs: [],stateMutability: "payable",type: "function",},{inputs: [{components: [{internalType: "address",name: "sender",type: "address",},{internalType: "uint256",name: "nonce",type: "uint256",},{internalType: "bytes",name: "initCode",type: "bytes",},{internalType: "bytes",name: "callData",type: "bytes",},{internalType: "uint256",name: "callGasLimit",type: "uint256",},{internalType: "uint256",name: "verificationGasLimit",type: "uint256",},{internalType: "uint256",name: "preVerificationGas",type: "uint256",},{internalType: "uint256",name: "maxFeePerGas",type: "uint256",},{internalType: "uint256",name: "maxPriorityFeePerGas",type: "uint256",},{internalType: "bytes",name: "paymasterAndData",type: "bytes",},{internalType: "bytes",name: "signature",type: "bytes",},],internalType: "struct UserOperation",name: "userOp",type: "tuple",},{internalType: "bytes32",name: "userOpHash",type: "bytes32",},{internalType: "uint256",name: "missingAccountFunds",type: "uint256",},],name: "validateUserOp",outputs: [{internalType: "uint256",name: "validationData",type: "uint256",},],stateMutability: "nonpayable",type: "function",},{inputs: [{internalType: "address payable",name: "withdrawAddress",type: "address",},{internalType: "uint256",name: "amount",type: "uint256",},],name: "withdrawDepositTo",outputs: [],stateMutability: "nonpayable",type: "function",},{stateMutability: "payable",type: "receive",},] as const
Const SimpleAccountFactoryAbi
SimpleAccountFactoryAbi: [{ inputs: [{ internalType: "contract IEntryPoint"; name: "_entryPoint"; type: "address" }]; stateMutability: "nonpayable"; type: "constructor" }, { inputs: []; name: "accountImplementation"; outputs: [{ internalType: "contract SimpleAccount"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }, { inputs: [{ internalType: "address"; name: "owner"; type: "address" }, { internalType: "uint256"; name: "salt"; type: "uint256" }]; name: "createAccount"; outputs: [{ internalType: "contract SimpleAccount"; name: "ret"; type: "address" }]; stateMutability: "nonpayable"; type: "function" }, { inputs: [{ internalType: "address"; name: "owner"; type: "address" }, { internalType: "uint256"; name: "salt"; type: "uint256" }]; name: "getAddress"; outputs: [{ internalType: "address"; name: ""; type: "address" }]; stateMutability: "view"; type: "function" }] = [{inputs: [{internalType: "contract IEntryPoint",name: "_entryPoint",type: "address",},],stateMutability: "nonpayable",type: "constructor",},{inputs: [],name: "accountImplementation",outputs: [{internalType: "contract SimpleAccount",name: "",type: "address",},],stateMutability: "view",type: "function",},{inputs: [{internalType: "address",name: "owner",type: "address",},{internalType: "uint256",name: "salt",type: "uint256",},],name: "createAccount",outputs: [{internalType: "contract SimpleAccount",name: "ret",type: "address",},],stateMutability: "nonpayable",type: "function",},{inputs: [{internalType: "address",name: "owner",type: "address",},{internalType: "uint256",name: "salt",type: "uint256",},],name: "getAddress",outputs: [{internalType: "address",name: "",type: "address",},],stateMutability: "view",type: "function",},] as const
Const SupportedNetworks
SupportedNetworks: number[] = [1, 10, 14, 30, 31, 56, 97, 100, 114, 122, 123, 137, 2357, 5000, 5003, 8453, 10200, 20197, 42161, 43113, 43114, 59140, 59144, 80002, 84532, 421614, 534351, 534352, 11155111, 11155420, 28122024, 888888888]
Const TOKEN_LIST_MAX_NAME_LENGTH
TOKEN_LIST_MAX_NAME_LENGTH: 32 = 32
Const TOKEN_LIST_MIN_NAME_LENGTH
TOKEN_LIST_MIN_NAME_LENGTH: 3 = 3
Const UserOpType
UserOpType: any = entryPointAbi.find((entry) => entry.name === validateUserOpMethod)?.inputs[0]
Const _abi
_abi: [{ inputs: [{ internalType: "bytes32"; name: "hash"; type: "bytes32" }, { internalType: "bytes"; name: "signature"; type: "bytes" }]; name: "isValidSignature"; outputs: [{ internalType: "bytes4"; name: "magicValue"; type: "bytes4" }]; stateMutability: "view"; type: "function" }] = [{inputs: [{internalType: "bytes32",name: "hash",type: "bytes32",},{internalType: "bytes",name: "signature",type: "bytes",},],name: "isValidSignature",outputs: [{internalType: "bytes4",name: "magicValue",type: "bytes4",},],stateMutability: "view",type: "function",},] as const
Const _bytecode
_bytecode: "0x60a0604052604051620000129062000076565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200006f57600080fd5b5062000084565b61046f806200a67083390190565b60805161a5c9620000a76000396000818161264e0152616e6f015261a5c96000f3fe6080604052600436106101025760003560e01c8063957122ab11610095578063bb9fe6bf11610064578063bb9fe6bf1461034f578063c23a5cea14610366578063d6383f941461038f578063ee219423146103b8578063fc7e286d146103e157610126565b8063957122ab146102a45780639b249f69146102cd578063a6193531146102f6578063b760faf91461033357610126565b80634b1d7cf5116100d15780634b1d7cf5146101d65780635287ce12146101ff57806370a082311461023c5780638f41ec5a1461027957610126565b80630396cb601461012b5780631d732756146101475780631fad948c14610184578063205c2878146101ad57610126565b366101265761011b67bd85ada7de3f843660c01b610422565b61012433610425565b005b600080fd5b6101456004803603810190610140919061742f565b61056d565b005b34801561015357600080fd5b5061016e6004803603810190610169919061782c565b610b04565b60405161017b91906178cd565b60405180910390f35b34801561019057600080fd5b506101ab60048036038101906101a6919061797c565b611044565b005b3480156101b957600080fd5b506101d460048036038101906101cf91906179dc565b611340565b005b3480156101e257600080fd5b506101fd60048036038101906101f89190617a72565b6116a5565b005b34801561020b57600080fd5b5061022660048036038101906102219190617ad2565b61210a565b6040516102339190617bdb565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e9190617ad2565b612293565b60405161027091906178cd565b60405180910390f35b34801561028557600080fd5b5061028e612344565b60405161029b91906178cd565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c69190617bf6565b612349565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190617c8b565b612624565b005b34801561030257600080fd5b5061031d60048036038101906103189190617cfd565b612726565b60405161032a9190617d55565b60405180910390f35b61034d60048036038101906103489190617ad2565b610425565b005b34801561035b57600080fd5b5061036461279e565b005b34801561037257600080fd5b5061038d60048036038101906103889190617d70565b612aa2565b005b34801561039b57600080fd5b506103b660048036038101906103b19190617d9d565b612fd2565b005b3480156103c457600080fd5b506103df60048036038101906103da9190617cfd565b61331a565b005b3480156103ed57600080fd5b5061040860048036038101906104039190617ad2565b61389a565b604051610419959493929190617e69565b60405180910390f35b50565b61043967468b4d0eb923786460c01b610422565b61044d67e2dd04761b71021160c01b610422565b6104616739f840fbb98466ea60c01b610422565b61046b8134613933565b61047f672ae9f4c70e9ac82160c01b610422565b6104936780392b76417dd37060c01b610422565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506104e96716b6918eb131153d60c01b610422565b6104fd6782b3f6f7efef9a3060c01b610422565b8173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260000160009054906101000a90046dffffffffffffffffffffffffffff166040516105619190617ef7565b60405180910390a25050565b610581676a63848afe7b25a660c01b610422565b610595678aabda62f45d36d860c01b610422565b6105a967cd2a6344bb8ba41d60c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506105ff6764f9747c720a16ff60c01b610422565b6106136756f07cead6218a0d60c01b610422565b61062767f7e41ffdf6e7b07360c01b610422565b60008263ffffffff1611610670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066790617f6f565b60405180910390fd5b6106846745ba7f8864c4838a60c01b610422565b610698673eb5cba913e1b29a60c01b610422565b6106ac674e10279e834acc5160c01b610422565b6106c067b9b4e84773c481f160c01b610422565b8060010160009054906101000a900463ffffffff1663ffffffff168263ffffffff161015610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a90617fdb565b60405180910390fd5b61073767e43e0a0e0e0b681b60c01b610422565b61074b67fd842514a971b95360c01b610422565b61075f676e3816719231aed060c01b610422565b60003482600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661079b919061802a565b90506107b1675a0b2db399659cb660c01b610422565b6107c56714a14fbd67cb18f260c01b610422565b6107d967be3384e9308ba91560c01b610422565b6000811161081c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610813906180aa565b60405180910390fd5b61083067e860cef7076562e860c01b610422565b610844675863f8ef40016f1360c01b610422565b61085867c67ebc2721963fd060c01b610422565b61086c67cde4026bd69782e060c01b610422565b6dffffffffffffffffffffffffffff80168111156108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b690618116565b60405180910390fd5b6108d36793b6d1c7ed9974a960c01b610422565b6108e767d8267f00f5f9303460c01b610422565b6040518060a001604052808360000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152602001600115158152602001826dffffffffffffffffffffffffffff1681526020018463ffffffff168152602001600065ffffffffffff168152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550602082015181600001600e6101000a81548160ff021916908315150217905550604082015181600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555060608201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550905050610a9b67eb1c85f247f3f58060c01b610422565b610aaf67e4a8c29fd2ae2b1960c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c018285604051610af7929190618167565b60405180910390a2505050565b6000610b1a67db3526811af6d2f660c01b613b0b565b610b2d660512575ad400e160c01b613b0b565b610b41675e28714e8ca8473560c01b613b0b565b60005a9050610b5a67fbf195873194ab0060c01b613b0b565b610b6e6742164649c89ee89360c01b613b0b565b610b8267d32ef2f0c33a85dd60c01b613b0b565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be7906181dc565b60405180910390fd5b610c04676c1ebce823d882a160c01b613b0b565b610c186794845e22e51a4a2060c01b613b0b565b610c2c6780b462b8809afa0c60c01b613b0b565b600085600001519050610c49675ee627e33d5a9d4760c01b613b0b565b610c5d67c5a8ad7eeb6af64760c01b613b0b565b600081604001519050610c7a67b6cf7e4854e6b65a60c01b613b0b565b610c8e6768ef5487dffe40e260c01b613b0b565b610ca2678532b8be333513e760c01b613b0b565b61138882606001518201015a1015610d0657610cc8675f6b6fc26e1d7bcd60c01b613b0b565b610cdc67a0d813c4f9ca49ae60c01b613b0b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b610d1a67e33262b284b9622860c01b613b0b565b610d2e678b199f955efc1b8b60c01b613b0b565b610d4267d69684ddc4dead3960c01b613b0b565b6000610d5867c6aea2abdd90839d60c01b613b0b565b610d6c67daa27416126f734660c01b613b0b565b600089511115610f5d57610d8a67ff0652f47ca0cb8a60c01b613b0b565b610d9e67168087653bef8d4c60c01b613b0b565b610db2673ebcbd10cdc23a5860c01b613b0b565b6000610dc5846000015160008c86613b0e565b9050610ddb67a21eac7e12c81c9760c01b613b0b565b610def6773ed69f4eb5a84e060c01b613b0b565b80610f4257610e0867eb682f232ae0065460c01b613b0b565b610e1c67d09a82d3230f03fd60c01b613b0b565b610e306723ceaaff8c33f04160c01b613b0b565b6000610e3d610800613b4f565b9050610e53678bdf590ff52a5a2b60c01b613b0b565b610e67670588415b92d5232f60c01b613b0b565b600081511115610f0f57610e856762ba2321ed0e69c160c01b613b0b565b610e9967d1620a1ed4dcdc4c60c01b613b0b565b610ead67c0fc5eee94edd58c60c01b613b0b565b846000015173ffffffffffffffffffffffffffffffffffffffff168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610f0292919061827b565b60405180910390a3610f24565b610f236754fe5335162ab15860c01b613b0b565b5b610f38672f681d8c381fda6960c01b613b0b565b6001925050610f57565b610f566737e5eb8f6f7827c360c01b613b0b565b5b50610f72565b610f7167145dbc1ca024fb8660c01b613b0b565b5b610f8667c54267444da43bfc60c01b613b0b565b610f9a67599b3cfa8748f3b560c01b613b0b565b610fae67714bf44ce4a0381860c01b613b0b565b600088608001515a8603019050610fcf6785a90bc90fd0c5a860c01b613b0b565b610fe3679f9fbda8e47ac60460c01b613b0b565b6110356000838b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505085613ba7565b95505050505050949350505050565b61105867480f4be8a88a925660c01b613b0b565b61106c670718d96351a70ff760c01b613b0b565b61108067eda6ec5b72a8799760c01b613b0b565b600083839050905061109c67b8a5229407b3ffe260c01b613b0b565b6110b067454d30fce6f050fe60c01b613b0b565b60008167ffffffffffffffff8111156110cc576110cb617477565b5b60405190808252806020026020018201604052801561110557816020015b6110f2617276565b8152602001906001900390816110ea5790505b50905061111c672afc4210868ecdb260c01b613b0b565b611130679de92eca7afe9efe60c01b613b0b565b6111446783d9fd5825b3bd4760c01b613b0b565b60005b828110156112395761116367b42c932e1dc59b0c60c01b613b0b565b61117767ebaa907adb697f2660c01b613b0b565b600082828151811061118c5761118b6182ab565b5b602002602001015190506111aa670ce811578d6854ee60c01b613b0b565b6111be67b4de2464f4eca8f760c01b613b0b565b6000806111f0848a8a878181106111d8576111d76182ab565b5b90506020028101906111ea91906182e9565b856142e4565b9150915061120867551faaad0f42dec760c01b613b0b565b61121c67d8da3040f57e6e4860c01b613b0b565b61122984838360006147a0565b5050508080600101915050611147565b5061124e675489bf08514b848f60c01b613b0b565b611262676cdf4ed558a4877160c01b613b0b565b600061127867a821cbcf353d70f960c01b613b0b565b61128c67bc17dd3329400a2960c01b613b0b565b60005b83811015611305576112ab67e2f8129ef9d3658f60c01b613b0b565b6112f4818888848181106112c2576112c16182ab565b5b90506020028101906112d491906182e9565b8584815181106112e7576112e66182ab565b5b6020026020010151614b3b565b82019150808060010191505061128f565b5061131a6772b31bd0e942f20b60c01b613b0b565b61132e67b79c5a4cdbbf72fb60c01b613b0b565b6113388482614e11565b505050505050565b61135467560f3e8976c6b86c60c01b610422565b61136867b28c49611e086e9260c01b610422565b61137c67bdb6e574008a0ae360c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506113d26768e81caaf4bf08d260c01b610422565b6113e667dfd1b8104dcc02a360c01b610422565b6113fa671d227a41f8efec8b60c01b610422565b8060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1682111561146b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114629061835e565b60405180910390fd5b61147f67483db2d9f91c75b460c01b610422565b61149367981c38718e2f795260c01b610422565b818160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166114cd919061837e565b8160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550611517678933eb8a0225346d60c01b610422565b61152b675fa45e9fe98dbcb160c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8484604051611573929190618407565b60405180910390a261158f6749f89ede312291a760c01b610422565b6115a3674c5fe87fce31d59f60c01b610422565b60008373ffffffffffffffffffffffffffffffffffffffff16836040516115c990618461565b60006040518083038185875af1925050503d8060008114611606576040519150601f19603f3d011682016040523d82523d6000602084013e61160b565b606091505b5050905061162367a6213c671f35757e60c01b610422565b611637676742cd98f224910860c01b610422565b61164b6795caee35cc00a57f60c01b610422565b8061168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906184c2565b60405180910390fd5b61169f675622a5e8bd3b0c7760c01b610422565b50505050565b6116b967d45167d0b820409960c01b613b0b565b6116cd67cc35957a153378ca60c01b613b0b565b6116e1674c2989d892e87d0f60c01b613b0b565b60008383905090506116fd672fed84417ef8bfe860c01b613b0b565b6117116796028c97b81dd4ca60c01b613b0b565b6000611727675a4768fd252e3be560c01b613b0b565b61173b67c2c56575af3483b460c01b613b0b565b60005b82811015611a8c5761175a67693f8da5a6e9ab0a60c01b613b0b565b61176e677cda10462919d8e160c01b613b0b565b36868683818110611782576117816182ab565b5b905060200281019061179491906184e2565b90506117aa6705820c78111400f560c01b613b0b565b6117be6741ccf4d47e3583ee60c01b613b0b565b3660008280600001906117d1919061850a565b915091506117e9675a383c333b42a4e160c01b613b0b565b6117fd678f62bf7452b7eca160c01b613b0b565b600083602001602081019061181291906185ab565b9050611828671b309c9a411d1c6b60c01b613b0b565b61183c672799ca0d1fe6dfb260c01b613b0b565b611850670b6ba46882b67fa660c01b613b0b565b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b690618624565b60405180910390fd5b6118d367019aa5bc6cd397ac60c01b613b0b565b6118e767aa1c8bcbd930b1d460c01b613b0b565b6118fb67918ab343fe7e020a60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a3b576119436737f65cd02c2a8b4f60c01b613b0b565b61195767b4dcc864ad0a75ad60c01b613b0b565b61196b678760cc1fdf08e24860c01b613b0b565b8073ffffffffffffffffffffffffffffffffffffffff1663e3563a4f84848780604001906119999190618644565b6040518563ffffffff1660e01b81526004016119b89493929190618a0d565b60006040518083038186803b1580156119d057600080fd5b505afa9250505080156119e1575060015b611a36576119f96758ec6b8342bd3a2560c01b613b0b565b806040517f86a9f750000000000000000000000000000000000000000000000000000000008152600401611a2d9190618a57565b60405180910390fd5b611a50565b611a4f67a4a227a75bcaa00260c01b613b0b565b5b611a64678fc00b99d20e616b60c01b613b0b565b8282905086611a73919061802a565b9550505050508080611a8490618a72565b91505061173e565b50611aa16742ab1a1b4f7ee2ad60c01b613b0b565b611ab56771ab06326a91d17c60c01b613b0b565b60008167ffffffffffffffff811115611ad157611ad0617477565b5b604051908082528060200260200182016040528015611b0a57816020015b611af7617276565b815260200190600190039081611aef5790505b509050611b2167ea43e34cb3b2cd3560c01b613b0b565b611b356771f3173d2348639d60c01b613b0b565b6000611b4b67069f0801d2dbc6c260c01b613b0b565b611b5f671f650b22e651925e60c01b613b0b565b60005b84811015611dc557611b7e6745688aa7c89dd34560c01b613b0b565b611b9267580f3333dbb5da1560c01b613b0b565b36888883818110611ba657611ba56182ab565b5b9050602002810190611bb891906184e2565b9050611bce67ee341f5e72a97a8c60c01b613b0b565b611be267dcdc504a5a96256460c01b613b0b565b366000828060000190611bf5919061850a565b91509150611c0d67269527dec95cb11c60c01b613b0b565b611c216701979335b1e239c960c01b613b0b565b6000836020016020810190611c3691906185ab565b9050611c4c67706611ae2289a1c860c01b613b0b565b611c606743e9efaa7361986960c01b613b0b565b6000838390509050611c7c67809f0c0c8e7b3cff60c01b613b0b565b611c90677fffbda1e029bb3c60c01b613b0b565b60005b81811015611dac57611caf6773bea7e2a81daa4c60c01b613b0b565b611cc367291a7ba8300c92a360c01b613b0b565b6000898981518110611cd857611cd76182ab565b5b60200260200101519050611cf66771698436d6eaf0ed60c01b613b0b565b611d0a67563367cdfd60546260c01b613b0b565b600080611d3c8b898987818110611d2457611d236182ab565b5b9050602002810190611d3691906182e9565b856142e4565b91509150611d54674734362213fb1c0160c01b613b0b565b611d68677416f12f68d4556c60c01b613b0b565b611d74848383896147a0565b611d88677c5f9436e2492bd060c01b613b0b565b8a80611d9390618a72565b9b50505050508080611da490618a72565b915050611c93565b5050505050508080611dbd90618a72565b915050611b62565b50611dda67c16b30149cb0aa3c60c01b613b0b565b611dee67c0fb1faf9fc25f5660c01b613b0b565b6000611e0467e30df2c998e3e67160c01b613b0b565b60009150611e1c67c80b0563cb6f23f360c01b613b0b565b611e3067d2aa27a228f10a6360c01b613b0b565b60005b8581101561206157611e4f67a084dc518274b30f60c01b613b0b565b611e636743256d97934c584560c01b613b0b565b36898983818110611e7757611e766182ab565b5b9050602002810190611e8991906184e2565b9050611e9f67510cbc26f931437260c01b613b0b565b611eb3679ce57f2ae5c49cb960c01b613b0b565b806020016020810190611ec691906185ab565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a2611f1c677274beafcd04754f60c01b613b0b565b611f306730a1207ece35292760c01b613b0b565b366000828060000190611f43919061850a565b91509150611f5b67524efd8f365fdbd760c01b613b0b565b611f6f67c3cec05e9ac4028360c01b613b0b565b6000828290509050611f8b671aea3cc95726cae960c01b613b0b565b611f9f6775ee5a0920f5be5260c01b613b0b565b60005b8181101561204957611fbe67c00d6a090d98dcd260c01b613b0b565b61200788858584818110611fd557611fd46182ab565b5b9050602002810190611fe791906182e9565b8b8b81518110611ffa57611ff96182ab565b5b6020026020010151614b3b565b87612012919061802a565b965061202867b8d9f72bde1b1f2760c01b613b0b565b878061203390618a72565b985050808061204190618a72565b915050611fa2565b5050505050808061205990618a72565b915050611e33565b50612076670517e35055105ac660c01b613b0b565b61208a67a82eba569fb3785460c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a26120e26778b1e1413f5d45f360c01b613b0b565b6120f6671ff04071d095d97d60c01b613b0b565b6121008682614e11565b5050505050505050565b6121126172ae565b61212667af18cba7299e26ad60c01b610422565b61213a679ebf10ec7c30fe3160c01b610422565b61214e6791f79c211959ce6d60c01b610422565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200160008201600e9054906101000a900460ff1615151515815260200160008201600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815250509050919050565b60006122a967453056944367f73a60c01b610422565b6122bd67d6b0be6190aeaf3560c01b610422565b6122d167f5492b075a6b0a8d60c01b610422565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050919050565b600181565b61235d67b1f1af7bf6ef4bf160c01b613b0b565b61237167c16797003993b99260c01b613b0b565b612385671f4c2029f0795a7860c01b613b0b565b6000858590501480156123af575060008373ffffffffffffffffffffffffffffffffffffffff163b145b1561242b576123c867239c9d28660a0c2a60c01b613b0b565b6123dc67b669dd79727b383560c01b613b0b565b6123f067df142b3fce8a6b3b60c01b613b0b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290618b06565b60405180910390fd5b61243f672d592b374ca1c03b60c01b613b0b565b612453675a84500c42a4ab9e60c01b613b0b565b61246767138b2b31588d141560c01b613b0b565b601482829050106125ac5761248667910bcbd60a6e36da60c01b613b0b565b61249a679f613af2922d985460c01b613b0b565b6124ae67d3b376958f4f773160c01b613b0b565b600082826000906014926124c493929190618b30565b906124cf9190618baf565b60601c90506124e867829d00569e3e63ff60c01b613b0b565b6124fc67fd232d1f4371ecc760c01b613b0b565b60008173ffffffffffffffffffffffffffffffffffffffff163b036125925761252f67cfd0acef3b8a9c4b60c01b613b0b565b61254367ecca448ac47b240560c01b613b0b565b61255767551cab94402f008460c01b613b0b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258990618c5a565b60405180910390fd5b6125a667c5d9882188d9fe8b60c01b613b0b565b506125c1565b6125c067a6361feedecfec7760c01b613b0b565b5b6125d567eadb46768c67bc0660c01b613b0b565b6125e9677adc2c6b15b8fee460c01b613b0b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90618c9d565b60405180910390fd5b6126386716e0353279fd0bc160c01b613b0b565b61264c675d6dee4bf91cbea860c01b613b0b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3683836040518363ffffffff1660e01b81526004016126a7929190618cbd565b6020604051808303816000875af11580156126c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ea9190618cf6565b6040517f6ca7b80600000000000000000000000000000000000000000000000000000000815260040161271d9190618a57565b60405180910390fd5b600061273c6798117b896913c24160c01b613b0b565b6127506744f3abd0a14999b860c01b613b0b565b61276467145b145d2a81a8cc60c01b613b0b565b61276d8261500d565b304660405160200161278193929190618d23565b604051602081830303815290604052805190602001209050919050565b6127b267b727bdcaa60faa3460c01b610422565b6127c6677f65868562f2c1f760c01b610422565b6127da6703166387f9301add60c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061283067245e52c9cd0ed5c960c01b610422565b6128446788375c7a9700bb9d60c01b610422565b61285867234386199a1f5d4060c01b610422565b60008160010160009054906101000a900463ffffffff1663ffffffff16036128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac90618da6565b60405180910390fd5b6128c967608175fd3263809960c01b610422565b6128dd673b540901fbe1608b60c01b610422565b6128f1677b3886cd77d618dc60c01b610422565b61290567ac6c52375ca549b960c01b610422565b80600001600e9054906101000a900460ff16612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90618e12565b60405180910390fd5b61296a6798917dbf2092f49860c01b610422565b61297e67691384b691c8012660c01b610422565b612992676f00f75881e0d11c60c01b610422565b60008160010160009054906101000a900463ffffffff1663ffffffff16426129ba9190618e32565b90506129d067db9f9fbce77d71ae60c01b610422565b808260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550612a0b6703437ed7c3c0f01f60c01b610422565b600082600001600e6101000a81548160ff021916908315150217905550612a3c6725f7a9564c64e84560c01b610422565b612a50674634217d4d2d5c8c60c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a82604051612a969190618e9d565b60405180910390a25050565b612ab6675c449e66a915cc3f60c01b610422565b612aca678b9b5a0a7dfd210a60c01b610422565b612ade67aeae65745692194560c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b3467f27b98cae48780a260c01b610422565b612b486778c5ee9b5e93ce7d60c01b610422565b600081600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050612b8f674a127222c7585ec160c01b610422565b612ba3675697b8de89fc5b5060c01b610422565b612bb767a42fea213b1cd3fe60c01b610422565b60008111612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190618f04565b60405180910390fd5b612c0e67c670866b0fa843ae60c01b610422565b612c22671e193af69d857ac560c01b610422565b612c3667b8cb3865dea60c1860c01b610422565b612c4a6725bb5e27b1725b2060c01b610422565b60008260010160049054906101000a900465ffffffffffff1665ffffffffffff1611612cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca290618f70565b60405180910390fd5b612cbf672487230840f0a7b560c01b610422565b612cd3671fa143ab50cdda1660c01b610422565b612ce767c80dc0f646e58e2160c01b610422565b612cfb67d78f00466fda8f6a60c01b610422565b428260010160049054906101000a900465ffffffffffff1665ffffffffffff161115612d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5390618fdc565b60405180910390fd5b612d7067047e4ce27fc5edce60c01b610422565b612d84672488ba64f9c6dec060c01b610422565b60008260010160006101000a81548163ffffffff021916908363ffffffff160217905550612dbc67557c3eed50c93d6160c01b610422565b60008260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550612df8670e8c2f781dd367c760c01b610422565b600082600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550612e4467f9f05c06e34d3c2b60c01b610422565b612e5867ddfcc9a075dc351f60c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda38483604051612ea0929190618407565b60405180910390a2612ebc67bf0c59a6bff89d6d60c01b610422565b612ed067c7734f00106bfd0360c01b610422565b60008373ffffffffffffffffffffffffffffffffffffffff1682604051612ef690618461565b60006040518083038185875af1925050503d8060008114612f33576040519150601f19603f3d011682016040523d82523d6000602084013e612f38565b606091505b50509050612f5067fffde4fe56538fac60c01b610422565b612f64671b0f4978934c967e60c01b610422565b612f78671bcb2d2e59fa189160c01b610422565b80612fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faf90619048565b60405180910390fd5b612fcc679e7eabf637f3c98c60c01b610422565b50505050565b612fe667308e897ec9ac49b860c01b613b0b565b612ffa6746afd6154958d48760c01b613b0b565b61300e677943f5e49edb6c9060c01b613b0b565b613016617276565b61302a676b399b53e069a3a660c01b613b0b565b61303e67fd10b936731b4f9160c01b613b0b565b61304785615062565b61305b6740a63cbe3b28ab0f60c01b613b0b565b61306f673f895508e0d540a060c01b613b0b565b60008061307e600088856142e4565b915091506130966704eff507f83465d260c01b613b0b565b6130aa67302f1aa4c836323160c01b613b0b565b60006130b6838361522a565b90506130cc67e88deff7702581ef60c01b613b0b565b6130e067b25c829d6a16e4aa60c01b613b0b565b6130e86155a4565b6130fc67ea6ea2511b8d632760c01b613b0b565b613110673432152ca7835c3e60c01b613b0b565b600061311e60008a87614b3b565b905061313467a76dc2db7071bdb360c01b613b0b565b61314867746f7d9f4d57669460c01b613b0b565b6131506155a4565b6131646786c06cf5574ba78e60c01b613b0b565b613178675d95101420b09df260c01b613b0b565b600061318e673f929187b4c9082d60c01b613b0b565b6131a2679d6f362de5986eb960c01b613b0b565b60606131b8676649d6a2c518852d60c01b613b0b565b6131cc67cc9da580bdacbbe560c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461329e57613213661447dbcfd5837660c01b613b0b565b61322767f22079f9dd8dfecb60c01b613b0b565b8973ffffffffffffffffffffffffffffffffffffffff16898960405161324e92919061908d565b6000604051808303816000865af19150503d806000811461328b576040519150601f19603f3d011682016040523d82523d6000602084013e613290565b606091505b5080925081935050506132b3565b6132b267d90f8e732302d9f460c01b613b0b565b5b6132c767b42cc8f96635c06860c01b613b0b565b8660800151838560200151866040015185856040517f8b7ac980000000000000000000000000000000000000000000000000000000008152600401613311969594939291906190a6565b60405180910390fd5b61332e67adebb93f041c28da60c01b613b0b565b613342674d0c930f5ff7318060c01b613b0b565b61335667a72d90442325d8a760c01b613b0b565b61335e617276565b61337267ca99458f9089f9cc60c01b613b0b565b61338667da0268cca058caeb60c01b613b0b565b61338f82615062565b6133a367f2cc202fae4e6d2860c01b613b0b565b6133b7676b890ebe4d93dd6760c01b613b0b565b6000806133c6600085856142e4565b915091506133de6798724490aedc5f6d60c01b613b0b565b6133f26777f8798bf1f0265e60c01b613b0b565b6000613405846000015160a001516155d2565b905061341b67bd452490c91954fb60c01b613b0b565b61342f673978756d1524ccc960c01b613b0b565b60006134428560000151600001516155d2565b9050613458677acbcb2f5ef3302660c01b613b0b565b61346c6729be7955feddb26060c01b613b0b565b61347461730d565b61348867f3272f3fb8dc76ea60c01b613b0b565b61349c67b004d9dd5d9e395460c01b613b0b565b6134b067bd5cc9bc63e18e7860c01b613b0b565b3660008880604001906134c39190618644565b915091506134db6759902901f5fc97d660c01b613b0b565b6134ef67050405a1d1e226dd60c01b613b0b565b6000601483839050101580156135155750613514674e71178c7f8d1dd360c01b6156e2565b5b80613530575061352f67647e7e719dd3403760c01b6156ed565b5b61353b57600061355e565b828260009060149261354f93929190618b30565b9061355a9190618baf565b60601c5b905061357467d9dc24b09e2c744060c01b613b0b565b61357d816155d2565b935050505061359667fd1dd0e4fb8dd7ac60c01b613b0b565b6135aa677f3a7f298afe405860c01b613b0b565b60006135b6868661522a565b90506135cc67c748266f190cdd6f60c01b613b0b565b6135e0679811ad866476a4e760c01b613b0b565b6000816000015190506135fd67bff7b97a6411a26a60c01b613b0b565b61361167bbbcd46e34937d7160c01b613b0b565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061365967f56f2c6435ad476560c01b613b0b565b61366d6701c07411d06e812460c01b613b0b565b60006040518060c001604052808b6080015181526020018b6040015181526020018315158152602001856020015165ffffffffffff168152602001856040015165ffffffffffff1681526020016136c78c606001516156f4565b81525090506136e0674d18487e1344149a60c01b613b0b565b6136f4673887d13a5d72e38260c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561375e5750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561382f5761377767c9dee408325af2cc60c01b613b0b565b61378b67d87ebd31eb97f10860c01b613b0b565b61379f6788c5110cc116a3a260c01b613b0b565b600060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020016137d1866155d2565b81525090506137ea67aafeb9832d13176a60c01b613b0b565b8187878a846040517ffaecb4e400000000000000000000000000000000000000000000000000000000815260040161382695949392919061925d565b60405180910390fd5b61384367b59d5f7f376aa49b60c01b613b0b565b61385767bd0e2364c61bc38560c01b613b0b565b808686896040517fe0cff05f00000000000000000000000000000000000000000000000000000000815260040161389194939291906192b8565b60405180910390fd5b60006020528060005260406000206000915090508060000160009054906101000a90046dffffffffffffffffffffffffffff169080600001600e9054906101000a900460ff169080600001600f9054906101000a90046dffffffffffffffffffffffffffff16908060010160009054906101000a900463ffffffff16908060010160049054906101000a900465ffffffffffff16905085565b61394767641b16ec65b6a68a60c01b610422565b61395b677bc0adde2d418a7060c01b610422565b61396f67882a2e6265487f8060c01b610422565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506139c567a859bcc12ff4ca1b60c01b610422565b6139d967333c6fae9efbfe3560c01b610422565b6000828260000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16613a15919061802a565b9050613a2b677a9b7bf552fadc3360c01b610422565b613a3f67dc5d7b6a53eb99c660c01b610422565b613a536737910712e61ec37c60c01b610422565b6dffffffffffffffffffffffffffff8016811115613aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9d90619350565b60405180910390fd5b613aba67cd0f0402a9a2515360c01b610422565b613ace67495b2fc5f8d7b4a560c01b610422565b808260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555050505050565b50565b6000613b24672fcf8105fec3df7b60c01b615726565b613b386722473413de3c15fc60c01b615726565b600080845160208601878987f19050949350505050565b6060613b6567303f3b4426b9544e60c01b615726565b613b79677f275f50bcc460f960c01b615726565b3d82811115613b86578290505b604051602082018101604052818152816000602083013e8092505050919050565b6000613bbd676b7dccbe8d01c1b360c01b613b0b565b613bd167c914c7e4eb9527dd60c01b613b0b565b613be567bd9e241408179e3e60c01b613b0b565b60005a9050613bfe670528d035eb11ccd960c01b613b0b565b613c12678232911969024b1e60c01b613b0b565b613c2667f254d0853ab9151860c01b613b0b565b6000613c3c67c866fe45a820868d60c01b613b0b565b613c50674250def80b9cdffa60c01b613b0b565b600086600001519050613c6d67a4034fd86be7493260c01b613b0b565b613c816779f4f5f41e09e1f560c01b613b0b565b6000613c8c82615729565b9050613ca267dac9783205b79b5060c01b613b0b565b613cb667a9f6622ab8b1df7760c01b613b0b565b60008260a001519050613cd3676e86f8ae258d31fc60c01b613b0b565b613ce767190233c50b822bad60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613d4f57613d2f67d82973dd8b5e756a60c01b613b0b565b613d436705c1feb00d338ee160c01b613b0b565b82600001519350614098565b613d6367bcda3e6439d8dc5160c01b613b0b565b613d7767cae11a430f67971760c01b613b0b565b809350613d8e67d7ffeaae933a36d060c01b613b0b565b613da267adaeb70358f5b14860c01b613b0b565b60008851111561408257613dc0676df70878573bf74b60c01b613b0b565b613dd4679762e536b54aba4260c01b613b0b565b8187029550613ded67f077938fa615dd5060c01b613b0b565b613e0167c99b393c8303c05a60c01b613b0b565b600280811115613e1457613e13619370565b5b8a6002811115613e2757613e26619370565b5b14613ee257613e406792a4c43819ceb85e60c01b613b0b565b613e546715f5372c9a665beb60c01b613b0b565b613e6867acea0271fb902f8d60c01b613b0b565b8073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b8152600401613eaa939291906193e7565b600060405180830381600088803b158015613ec457600080fd5b5087f1158015613ed8573d6000803e3d6000fd5b505050505061407d565b613ef6675c81ea4ed2050e2a60c01b613b0b565b613f0a67b7962f99fce57f7060c01b613b0b565b613f1e67db7246cce1a7934560c01b613b0b565b8073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b8152600401613f60939291906193e7565b600060405180830381600088803b158015613f7a57600080fd5b5087f193505050508015613f8c575060015b61407c57613f98619432565b806308c379a0036140295750613fac619454565b80613fb7575061402b565b613fcb6727cbaddc4df8e08e60c01b613b0b565b8b81604051602001613fdd9190619551565b6040516020818303038152906040526040517f220266b60000000000000000000000000000000000000000000000000000000081526004016140209291906195b0565b60405180910390fd5b505b61403f67146b4887806fe10b60c01b613b0b565b8a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614073919061962c565b60405180910390fd5b5b614097565b61409667e06ee38d2d3dbf4260c01b613b0b565b5b5b6140ac676f5dbd21c9125cd860c01b613b0b565b5a8503870196506140c7679a948bc5f171402a60c01b613b0b565b81870295506140e06710d5f3f58edb5dd060c01b613b0b565b6140f46725c8ddccd2a1e2a260c01b613b0b565b858960400151101561416557614114673818924813f43e5260c01b613b0b565b6141286792b7decf890025c960c01b613b0b565b8a6040517f220266b600000000000000000000000000000000000000000000000000000000815260040161415c91906196a6565b60405180910390fd5b614179674e6856a4e466aef260c01b613b0b565b61418d67d6c35d57572b966260c01b613b0b565b6141a1676f729716f62a808760c01b613b0b565b6000868a604001510390506141c0676d15de463b359f1c60c01b613b0b565b6141d46771b7ab82d62d097e60c01b613b0b565b6141de8582613933565b6141f16679db7ebbddfe4460c01b613b0b565b61420567e86c122c2992c0e560c01b613b0b565b600080600281111561421a57614219619370565b5b8c600281111561422d5761422c619370565b5b149050614244677efc529e88ddb75560c01b613b0b565b61425867c9be395154365aea60c01b613b0b565b8460a0015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff168c602001517f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f8860200151858d8f6040516142cc94939291906196d4565b60405180910390a45050505050505095945050505050565b6000806142fb67d34039aa0eb98c0960c01b613b0b565b61430f67a2181ff15855e33660c01b613b0b565b614323674f71979477c58c0260c01b613b0b565b60005a905061433c674f3e95a6ed4f6b5c60c01b613b0b565b614350671548a9d28bcff14b60c01b613b0b565b60008460000151905061436d67c9be5937a3943cc660c01b613b0b565b6143816758083866582be81060c01b613b0b565b61438b868261587c565b61439f67acd417f7c00b05ee60c01b613b0b565b6143a886612726565b8560200181815250506143c567afe5ef3d1d5b4e1a60c01b613b0b565b6143d9674f702fee37dcbfb160c01b613b0b565b60008661010001358760e0013583604001518460600151856080015117171717905061440f67e8d5a024d52514cb60c01b613b0b565b6144236770f91e936fc96c3b60c01b613b0b565b614437671f7dbd98090f551c60c01b613b0b565b6effffffffffffffffffffffffffffff801681111561448b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161448290619765565b60405180910390fd5b61449f679f62e1c6356d897e60c01b613b0b565b6144b367c4e70ab68d1a143960c01b613b0b565b6144c767c024a9b41cfafa7b60c01b613b0b565b60006144dd673d278ceaae9da29260c01b613b0b565b6144f167eeebf912e8fa4d4560c01b613b0b565b60006144fc84615bb4565b905061451267944a669b823630a660c01b613b0b565b61451e8a8a8a84615ce9565b809850819350505061453a672778705697a3977f60c01b613b0b565b61454e67e32c1dea5c52d0a260c01b613b0b565b6145566155a4565b61456a673f4c9e91048b950d60c01b613b0b565b61457e67e926034c4f53607360c01b613b0b565b6060614594670ea6529725653f1e60c01b613b0b565b6145a867955e6f66cb6400b660c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168560a0015173ffffffffffffffffffffffffffffffffffffffff1614614622576145f467ad071a44a92945a760c01b613b0b565b61460867a4cf53b3e8c9c3d460c01b613b0b565b6146158b8b8b85876163b0565b8098508192505050614637565b614636675108d43cde40cef460c01b613b0b565b5b61464b67b6ced13152ad086660c01b613b0b565b61465f67374f6f1e5358cd8f60c01b613b0b565b614673670652c7dd31993eb260c01b613b0b565b60005a8703905061468e678787f1dfcb14d78160c01b613b0b565b6146a2674fff11e75095ecf760c01b613b0b565b808b60a001351015614713576146c267b6ad64f0ab06bd8360c01b613b0b565b6146d6677e3c403c9d7eebd760c01b613b0b565b8b6040517f220266b600000000000000000000000000000000000000000000000000000000815260040161470a91906197d1565b60405180910390fd5b61472767486710f8ebff249e60c01b613b0b565b61473b67472da05a38066eaa60c01b613b0b565b828a60400181815250506147596773e329a6db5ba88360c01b613b0b565b614762826168c7565b8a606001818152505061477f672ecdde0ebb1f8ef960c01b613b0b565b8a60c001355a8803018a608001818152505050505050505050935093915050565b6147b4674d137f3badf8ea9660c01b613b0b565b6147c8676fa0d92ceccb5a2a60c01b613b0b565b6147dc673b2714f3b47d62dc60c01b613b0b565b6000806147e8856168f9565b91509150614800673e1b0c9df74a838f60c01b613b0b565b614814674284769e521acdfe60c01b613b0b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146148ac5761485b67999d03d25266223d60c01b613b0b565b61486f67160271be6e43056060c01b613b0b565b856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016148a3919061984b565b60405180910390fd5b6148c06746288d5b7730fc0f60c01b613b0b565b6148d4670621ff31260af8f860c01b613b0b565b6148e8673f71452c68a3856f60c01b613b0b565b80156149535761490267e32f67b676bbc2c860c01b613b0b565b61491667efa3849e8647f22b60c01b613b0b565b856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161494a91906198c5565b60405180910390fd5b6149676775e74b25646337da60c01b613b0b565b61497b673041f334f105bbcc60c01b613b0b565b61498f6772a50700a0abbcec60c01b613b0b565b60006149a5672fd487ba5e39b45e60c01b613b0b565b6149ae856168f9565b80935081925050506149ca6748ccb3962c4b88e260c01b613b0b565b6149de673a59b5d47e6b315b60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614a7757614a266796027ee26ef1bdd160c01b613b0b565b614a3a672377b5c640dca54460c01b613b0b565b866040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614a6e919061993f565b60405180910390fd5b614a8b6720c4adeca4b97c2f60c01b613b0b565b614a9f675a62abfc40a7be0f60c01b613b0b565b614ab367bb216ff411c11cd660c01b613b0b565b8115614b1e57614acd67c507a302a88d010a60c01b613b0b565b614ae16753c5dc6542460b6c60c01b613b0b565b866040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614b1591906199df565b60405180910390fd5b614b326719adbd2e485c39ed60c01b613b0b565b50505050505050565b6000614b51670528304b9a4e276660c01b613b0b565b614b65671dc140e2ccab3fd260c01b613b0b565b614b7967b1fb421bdae9b06560c01b613b0b565b60005a9050614b926773c737e49b0ea73f60c01b613b0b565b614ba667bbe717af0b97d78660c01b613b0b565b6000614bb584606001516156f4565b9050614bcb670b031524c09bd43560c01b613b0b565b614bdf67dd83a019dc10b8a760c01b613b0b565b3073ffffffffffffffffffffffffffffffffffffffff16631d732756868060600190614c0b9190618644565b87856040518563ffffffff1660e01b8152600401614c2c9493929190619b2b565b6020604051808303816000875af1925050508015614c6857506040513d601f19601f82011682018060405250810190614c659190619b89565b60015b614def57614c8067ee73b3f231df63cd60c01b613b0b565b614c94673df6104dd8c6a59f60c01b613b0b565b6000614caa67b6b64d39ea0f734160c01b613b0b565b60206000803e6000519050614cc967766ce98d80aa790960c01b613b0b565b614cdd677458a05b861c89c760c01b613b0b565b7fdeaddead000000000000000000000000000000000000000000000000000000008103614d6957614d1867b9a9e7f3da56988660c01b613b0b565b614d2c67156d16e5b508173660c01b613b0b565b866040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614d609190619c02565b60405180910390fd5b614d7d673ee36b6cc848591160c01b613b0b565b614d9167353fe0d2f8fbd62460c01b613b0b565b614da56778239086464ad93560c01b613b0b565b600085608001515a85614db8919061837e565b614dc2919061802a565b9050614dd8671f888209a792f39360c01b613b0b565b614de6886002888685613ba7565b94505050614e08565b614e0367ae9ba21330eb831060c01b613b0b565b809350505b50509392505050565b614e2567ce4eaf1e3ecebc0a60c01b613b0b565b614e39678e806c1eb151833360c01b613b0b565b614e4d671b9353e0132c568860c01b613b0b565b614e61674f109bdea6b6dd4060c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ec790619c7c565b60405180910390fd5b614ee46786cdbf06ae0d6c9960c01b613b0b565b614ef8679a4fd059eeb243bf60c01b613b0b565b614f0c6755929728ee06af6e60c01b613b0b565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051614f3290618461565b60006040518083038185875af1925050503d8060008114614f6f576040519150601f19603f3d011682016040523d82523d6000602084013e614f74565b606091505b50509050614f8c672c7ae608d7ee218660c01b613b0b565b614fa067632c47631756cf7960c01b613b0b565b614fb467fa7aba00a44115ad60c01b613b0b565b80614ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614feb90619ce8565b60405180910390fd5b61500867c324c947c6690a3760c01b613b0b565b505050565b6000615023676ef62f88472d66ea60c01b616a2e565b61503767b557b889e8f81d6f60c01b616a2e565b61504b67656ff2fa1b6bb2b760c01b616a2e565b61505482616a31565b805190602001209050919050565b6150766726d7141481ab323560c01b613b0b565b61508a676e07210c39e4486260c01b613b0b565b61509e67a5955441815976cb60c01b613b0b565b3073ffffffffffffffffffffffffffffffffffffffff1663957122ab8280604001906150ca9190618644565b8460000160208101906150dd9190617ad2565b858061012001906150ee9190618644565b6040518663ffffffff1660e01b815260040161510e959493929190619d08565b60006040518083038186803b15801561512657600080fd5b505afa925050508015615137575060015b61522657615143619432565b806308c379a0036152155750615157619454565b806151625750615217565b615176678ad6c6220dff946760c01b613b0b565b61518a673edaf9b29bc58cfa60c01b613b0b565b60008151146151fb576151a76791345e2a34de5be160c01b613b0b565b6151bb6751e54c767bab910360c01b613b0b565b6000816040517f220266b60000000000000000000000000000000000000000000000000000000081526004016151f2929190619d8c565b60405180910390fd5b61520f67936ff6bb34bef0d560c01b613b0b565b50615221565b505b3d6000803e3d6000fd5b615227565b5b50565b615232617327565b61524667e69f7455fa7a07b360c01b616ac3565b61525a67b4cd7af03ea2c5fa60c01b616ac3565b61526e67ada53efb1dfccb7760c01b616ac3565b600061527984616ac6565b905061528f674d0f716f7bcb7b9260c01b616ac3565b6152a367d63d53a2153b304860c01b616ac3565b60006152ae84616ac6565b90506152c46722fc217c8bb3a21260c01b616ac3565b6152d867d43a06a00665043560c01b616ac3565b6000826000015190506152f567151bc2b1c770894460c01b616ac3565b6153096732841106c226c6e260c01b616ac3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361537157615351671aace643f445af3c60c01b616ac3565b61536567b767f16e441c791560c01b616ac3565b81600001519050615386565b6153856721f72ae527759e0160c01b616ac3565b5b61539a67976cb73ee93faf4060c01b616ac3565b6153ae67fbc1cf9b45ac9e0560c01b616ac3565b6000836020015190506153cb675ae02cf73427453160c01b616ac3565b6153df672f3e3d635ca3dee260c01b616ac3565b6000846040015190506153fc67d85c8bdd30a53c2060c01b616ac3565b61541067479ce7ff317d61d960c01b616ac3565b60008460200151905061542d6748cd0366f66a74d660c01b616ac3565b61544167233a1ba95415d76360c01b616ac3565b60008560400151905061545e67f891c3f91e3987cf60c01b616ac3565b61547267ee2ac2151246907660c01b616ac3565b8165ffffffffffff168465ffffffffffff1610156154a65761549e677765bdded08f417460c01b616ac3565b8193506154bb565b6154ba673db76e2382591bc460c01b616ac3565b5b6154cf67bbd9ea227d2e8b6160c01b616ac3565b6154e367269600f4d05d62c160c01b616ac3565b8065ffffffffffff168365ffffffffffff1611156155175761550f67769c64441515ae4760c01b616ac3565b80925061552c565b61552b6792508f8b38fce31860c01b616ac3565b5b61554067c4465d6321fbb3e560c01b616ac3565b61555467d764ee64c31d59fd60c01b616ac3565b60405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018565ffffffffffff1681526020018465ffffffffffff1681525097505050505050505092915050565b6155b867af03e0b4035ea55660c01b613b0b565b6155cc67c9620b9c790e33cb60c01b613b0b565b43600052565b6155da61730d565b6155ee67ddd75e05ea2d470b60c01b610422565b6156026714178d6d1eec377660c01b610422565b61561667ed0c0f5c0a4f897960c01b610422565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061566c6796c6174e6db8a70c60c01b610422565b80600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168260000181815250506156b867a2474a1809029c6460c01b610422565b8060010160009054906101000a900463ffffffff1663ffffffff1682602001818152505050919050565b600060019050919050565b6000919050565b606061570a678ccfdf63a27f24a160c01b613b0b565b61571e67ec4fc9a45c4cbeda60c01b613b0b565b819050919050565b50565b600061573f6723710d455cbd1fc260c01b613b0b565b615753678552644400882c5660c01b613b0b565b61576767acd0ff56e29caf5760c01b613b0b565b61577b6790173f487bf921c360c01b613b0b565b60008260c0015190506157986788011b89016c87e660c01b613b0b565b6157ac67eabe9d1df1872cb860c01b613b0b565b60008360e0015190506157c96780eabf868b5a2d7860c01b613b0b565b6157dd673a9f497be6de2ad960c01b613b0b565b80820361582a576157f8678e77373db57e0bad60c01b613b0b565b61580c67e9b1eb10be1bde8160c01b613b0b565b615820671cf2ad91872d569360c01b613b0b565b8192505050615877565b61583e67e69ed61328bcf05760c01b613b0b565b61585267f003812ff22f97f660c01b613b0b565b6158666780449873cf826ce860c01b613b0b565b61587282488301616c67565b925050505b919050565b6158906794398c88f005709f60c01b613b0b565b6158a4672b03b3419c14484c60c01b613b0b565b8160000160208101906158b79190617ad2565b816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506159026793d9e770a6faaa2f60c01b613b0b565b816020013581602001818152505061592467139dbe991306ae9c60c01b613b0b565b816080013581604001818152505061594667f0718aa2010e8b9560c01b613b0b565b8160a0013581606001818152505061596867ad45b8a29a93eeab60c01b613b0b565b8160c0013581608001818152505061598a67466bf6fad93902ac60c01b613b0b565b8160e001358160c00181815250506159ac672b132ec41befa5cd60c01b613b0b565b8161010001358160e00181815250506159cf67dd742c4ce53972e660c01b613b0b565b6159e36763014b2d1488f93260c01b613b0b565b366000838061012001906159f79190618644565b91509150615a0f676a2e7bfc8710069c60c01b613b0b565b615a236780511592895b61c960c01b613b0b565b6000828290501115615b4c57615a4367eb7fb348aa1ce84260c01b613b0b565b615a576744ab1d52d3a7326f60c01b613b0b565b615a6b675c26b2f94c28f87460c01b613b0b565b615a7f679001d1e1aa36379560c01b613b0b565b6014828290501015615ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615abd90619e08565b60405180910390fd5b615ada6790a6340ef2e7fe5560c01b613b0b565b615aee67d6fdc4d38c3f1d0a60c01b613b0b565b8181600090601492615b0293929190618b30565b90615b0d9190618baf565b60601c8360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050615bae565b615b606726722d51917cb4b860c01b613b0b565b615b7467b81fb2bb3b12cb4d60c01b613b0b565b60008360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b50505050565b6000615bca67aad98d6154acdcd760c01b613b0b565b615bde67b73e465bf9e52b6160c01b613b0b565b615bf267f10067438ecb862a60c01b613b0b565b615c0667c4a4fe6ede678b5760c01b613b0b565b60008073ffffffffffffffffffffffffffffffffffffffff168360a0015173ffffffffffffffffffffffffffffffffffffffff1614158015615c585750615c5767d835fc68629f38cd60c01b6156e2565b5b80615c735750615c7267117b2d6966bdaf0160c01b6156ed565b5b615c7e576001615c81565b60035b60ff169050615c9a67700816a1e3bb6d7060c01b613b0b565b615cae6744c1d1938606be1b60c01b613b0b565b6000836080015182856060015102856040015101019050615cd9671f763ace8f3bd88260c01b613b0b565b8360c00151810292505050919050565b600080615d0067d4e9699b2987ab0760c01b613b0b565b615d14675d8d1e834eef448f60c01b613b0b565b615d28672a8009d8c4675d0060c01b613b0b565b615d3c67d1a16c3013ed626460c01b613b0b565b60005a9050615d55672177cad0712c948960c01b613b0b565b615d6967df910ae4468fb24e60c01b613b0b565b600085600001519050615d8667c0879bee2d658afa60c01b613b0b565b615d9a67feb8ebb8a16f14c160c01b613b0b565b600081600001519050615db7670f5581ebd890213060c01b613b0b565b615dcb67f731688142019ef360c01b613b0b565b615de589888a8060400190615de09190618644565b616cf3565b615df967716d94d66ad0a57c60c01b613b0b565b615e0d671a28f26b5f8bf60360c01b613b0b565b60008260a001519050615e2a6729383920594cbefd60c01b613b0b565b615e3e67a10f5e1e6e0cc5f160c01b613b0b565b615e466155a4565b615e5a6733ca9099d32a694360c01b613b0b565b615e6e67356738e8d94640f260c01b613b0b565b6000615e8467f63877a5811722d860c01b613b0b565b615e9867b3c691595510b94960c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603615f7a57615ee067ce50778bc4ab94f860c01b613b0b565b615ef4678727f7e2a4b5b24960c01b613b0b565b615f0867dd1f12ecfec9826660c01b613b0b565b6000615f1384612293565b9050615f29676f78bed3432c062760c01b613b0b565b8881118015615f485750615f476749348aa66d657c5460c01b6156e2565b5b80615f635750615f6267e1b4631d968b658a60c01b6156ed565b5b615f6f57808903615f72565b60005b915050615f8f565b615f8e67277fbdb87062126f60c01b613b0b565b5b615fa3679b9f439e0fe1fd8760c01b613b0b565b615fb7676295b15d043a50e760c01b613b0b565b8273ffffffffffffffffffffffffffffffffffffffff16633a871cdd85606001518c8c60200151856040518563ffffffff1660e01b8152600401615ffd93929190619f8c565b60206040518083038160008887f19350505050801561603a57506040513d601f19601f820116820180604052508101906160379190619b89565b60015b61612a57616046619432565b806308c379a0036160d7575061605a619454565b8061606557506160d9565b61607967af349b3257cee67a60c01b613b0b565b8b8160405160200161608b9190619ff0565b6040516020818303038152906040526040517f220266b60000000000000000000000000000000000000000000000000000000081526004016160ce9291906195b0565b60405180910390fd5b505b6160ed6749f99c326384549e60c01b613b0b565b8a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616121919061a062565b60405180910390fd5b61613e67b542a0d7e71e5c8c60c01b613b0b565b8096505061615667a32d24326b1c513a60c01b613b0b565b61616a673182b8e917179af560c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603616374576161b267d40966d106ca1f5760c01b613b0b565b6161c667571f1ba350ae084a60c01b613b0b565b6161da670b792efad629a34560c01b613b0b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050616230670aab76fae7ce329860c01b613b0b565b616244674898c4c8721c6a3360c01b613b0b565b60008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905061628b67939153321635a50460c01b613b0b565b61629f67ba578c349170678360c01b613b0b565b808a111561630c576162bb67888110dcc13924a960c01b613b0b565b6162cf678ba8141c00e1655b60c01b613b0b565b8c6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616303919061a0dc565b60405180910390fd5b61632067b6199e7bfd865bf760c01b613b0b565b616334676cb4afd9c3644be460c01b613b0b565b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505050616389565b6163886707bc50531c774ab760c01b613b0b565b5b61639d67171a32dcde207a7560c01b613b0b565b5a85039650505050505094509492505050565b606060006163c8675abf7e4ac0e494db60c01b613b0b565b6163dc67aa1a5efdea46787f60c01b613b0b565b6163f067c3a27ebce7e1f4d560c01b613b0b565b616404674ba0c76546e38a7360c01b613b0b565b60008560000151905061642167f6d1634a9dbac5d560c01b613b0b565b616435676826ba9160765dfd60c01b613b0b565b600081606001519050616452671294154b32167c9760c01b613b0b565b616466672e05d8ba9e541b5860c01b613b0b565b61647a67f25cf8fae769115960c01b613b0b565b8481116164bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016164b39061a156565b60405180910390fd5b6164d06762aeaad29e31b57660c01b613b0b565b6164e467aeda739beecf882b60c01b613b0b565b6164f8678c0a9d287bf901aa60c01b613b0b565b6000858203905061651367ab13dece76541fa960c01b613b0b565b6165276703242ac27d96239460c01b613b0b565b60008360a00151905061654467e064ed7711e4f44160c01b613b0b565b61655867bb123bccc54e13cc60c01b613b0b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506165ae6731703428f7c074ed60c01b613b0b565b6165c267ac6c000120bac21a60c01b613b0b565b60008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905061660967af23c4bd6be76ee060c01b613b0b565b61661d67cd839a6f0c36e7ba60c01b613b0b565b8981101561668a5761663967d2cc586f1fba6ede60c01b613b0b565b61664d671630900ed293652460c01b613b0b565b8c6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616681919061a1c2565b60405180910390fd5b61669e677b787fd8d0eec8fc60c01b613b0b565b6166b2677965fa12a09ffed060c01b613b0b565b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055506166ff67c9536eaa4d6b721b60c01b613b0b565b616713673f97a3760e8e42d560c01b613b0b565b8273ffffffffffffffffffffffffffffffffffffffff1663f465c77e858e8e602001518e6040518563ffffffff1660e01b815260040161675593929190619f8c565b60006040518083038160008887f19350505050801561679757506040513d6000823e3d601f19601f82011682018060405250810190616794919061a260565b60015b616887576167a3619432565b806308c379a00361683457506167b7619454565b806167c25750616836565b6167d667c38841f5bb426dc460c01b613b0b565b8d816040516020016167e8919061a2e2565b6040516020818303038152906040526040517f220266b600000000000000000000000000000000000000000000000000000000815260040161682b9291906195b0565b60405180910390fd5b505b61684a67931a78f9e11717bb60c01b613b0b565b8c6040517f220266b600000000000000000000000000000000000000000000000000000000815260040161687e919061a354565b60405180910390fd5b61689b67d768037340671b7260c01b613b0b565b8199506168b267b051c398d37aeff560c01b613b0b565b80985050505050505050509550959350505050565b60006168dd6707014686f499504560c01b613b0b565b6168f16796709f10a759b60c60c01b613b0b565b819050919050565b600080616910674a13673f083cae7d60c01b613b0b565b616924674b63ab113bc3c6f460c01b613b0b565b616938672ffe021986d2217f60c01b613b0b565b600083036169885761695467d14111b5c0dc71b060c01b613b0b565b61696867717cc1608b786d6060c01b613b0b565b61697c676bcd67da856e0d2b60c01b613b0b565b60008091509150616a29565b61699c6728b87be4bd233a0860c01b613b0b565b6169b0675f83ae33b5d720b960c01b613b0b565b6169c467afa51eaba4ada43360c01b613b0b565b60006169cf84616ac6565b90506169e5677f2983a6aeb6e19c60c01b613b0b565b806040015165ffffffffffff16421180616a0a5750806020015165ffffffffffff1642105b9150616a2067c7bf9050789fae5e60c01b613b0b565b80600001519250505b915091565b50565b6060616a47670dec2dbb958a50d860c01b616a2e565b616a5b67f7ebcbf78dfbd2e760c01b616a2e565b616a6f67cf9d9e801922f74560c01b616a2e565b36600083806101400190616a839190618644565b91509150616a9b670c9fe5e21e8be86a60c01b616a2e565b8360208184030360405194506020810185016040528085528082602087013750505050919050565b50565b616ace617327565b616ae267445255dfc48f0c1160c01b616ac3565b616af667910e9ceb2fd1ddda60c01b616ac3565b616b0a678110ad95ab238bef60c01b616ac3565b6000829050616b2367c37597af64d819b260c01b616ac3565b616b3767745df2de1e3ff8c060c01b616ac3565b600060a084901c9050616b54675f3ae0fbd8e35c5660c01b616ac3565b616b68679197384898b1248760c01b616ac3565b60008165ffffffffffff1603616bae57616b8c676ec2d105430e80aa60c01b616ac3565b616ba0673b4825f59f411ff360c01b616ac3565b65ffffffffffff9050616bc3565b616bc267d11e3810d26f91af60c01b616ac3565b5b616bd767b9e858fecf1822cf60c01b616ac3565b616beb67d84bfe2ecd699a3c60c01b616ac3565b600060d085901c9050616c0867bf26ab64782cc21560c01b616ac3565b616c1c6716b05318dd950b3260c01b616ac3565b60405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018265ffffffffffff1681526020018365ffffffffffff168152509350505050919050565b6000616c7d6722175c0f9d46245a60c01b613b0b565b616c9167751619bcb02f97fd60c01b613b0b565b616ca567a2f19de15cde753c60c01b613b0b565b8183108015616cc45750616cc3677ff3f31aa240539460c01b6156e2565b5b80616cdf5750616cde67a156eae91ca1679a60c01b6156ed565b5b616ce95781616ceb565b825b905092915050565b616d076714b81b82e0d404e260c01b613b0b565b616d1b67ad5b2c067f5370fa60c01b613b0b565b616d2f67cb8395f833ee94b360c01b613b0b565b6000828290501461725b57616d4e673d934ef1a627c4d660c01b613b0b565b616d6267b1c545fef9fce3e760c01b613b0b565b616d7667ee209361e09d4b3060c01b613b0b565b60008360000151600001519050616d9767e453fe3e3c27ec0960c01b613b0b565b616dab67b335d211cfd6199a60c01b613b0b565b60008173ffffffffffffffffffffffffffffffffffffffff163b14616e2f57616dde67d17238321e17c45860c01b613b0b565b616df2675da8a164ebc30e0260c01b613b0b565b846040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616e26919061a3ce565b60405180910390fd5b616e43673be16346b366dcea60c01b613b0b565b616e5767d1050ad5ac855c1060c01b613b0b565b616e6b67516cdd3b5eb6451f60c01b613b0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516060015186866040518463ffffffff1660e01b8152600401616ed1929190618cbd565b60206040518083038160008887f1158015616ef0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190616f159190618cf6565b9050616f2b679ddc0b7480cf28f060c01b613b0b565b616f3f67fc851e2e35e3d69c60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603616fd857616f87671705c928229b781960c01b613b0b565b616f9b6742acc096bd718a9060c01b613b0b565b856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616fcf919061a448565b60405180910390fd5b616fec67ee2c1185c379a99b60c01b613b0b565b617000677b2608bd6112326460c01b613b0b565b6170146727a18a42769c8c7660c01b613b0b565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146170ac5761705b67fd1907cc849a07c260c01b613b0b565b61706f673adcce53dd1d53dc60c01b613b0b565b856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016170a3919061a4c2565b60405180910390fd5b6170c0679cbade85ccd08c4860c01b613b0b565b6170d467613cfc3cdff81b5c60c01b613b0b565b6170e867a824c7345ac3349d60c01b613b0b565b60008173ffffffffffffffffffffffffffffffffffffffff163b0361716c5761711b672c8b8acf7bac64f660c01b613b0b565b61712f676f72c43fa57e965a60c01b613b0b565b856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401617163919061a53c565b60405180910390fd5b61718067b6e6772723fa2a5660c01b613b0b565b6171946734b6cd6bbc43764260c01b613b0b565b6171a86725edc697080da99960c01b613b0b565b600084846000906014926171be93929190618b30565b906171c99190618baf565b60601c90506171e2671ddd5ee48b1a7f4660c01b613b0b565b6171f667f1990a72ac6f6e5660c01b613b0b565b8273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160a0015160405161724b92919061a56a565b60405180910390a3505050617270565b61726f678620bc314972512460c01b613b0b565b5b50505050565b6040518060a0016040528061728961736e565b8152602001600080191681526020016000815260200160008152602001600081525090565b6040518060a0016040528060006dffffffffffffffffffffffffffff16815260200160001515815260200160006dffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600065ffffffffffff1681525090565b604051806040016040528060008152602001600081525090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525090565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b61740c816173f3565b811461741757600080fd5b50565b60008135905061742981617403565b92915050565b600060208284031215617445576174446173e9565b5b60006174538482850161741a565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6174af82617466565b810181811067ffffffffffffffff821117156174ce576174cd617477565b5b80604052505050565b60006174e16173df565b90506174ed82826174a6565b919050565b600067ffffffffffffffff82111561750d5761750c617477565b5b61751682617466565b9050602081019050919050565b82818337600083830152505050565b6000617545617540846174f2565b6174d7565b90508281526020810184848401111561756157617560617461565b5b61756c848285617523565b509392505050565b600082601f8301126175895761758861745c565b5b8135617599848260208601617532565b91505092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006175d2826175a7565b9050919050565b6175e2816175c7565b81146175ed57600080fd5b50565b6000813590506175ff816175d9565b92915050565b6000819050919050565b61761881617605565b811461762357600080fd5b50565b6000813590506176358161760f565b92915050565b60006101008284031215617652576176516175a2565b5b61765d6101006174d7565b9050600061766d848285016175f0565b600083015250602061768184828501617626565b602083015250604061769584828501617626565b60408301525060606176a984828501617626565b60608301525060806176bd84828501617626565b60808301525060a06176d1848285016175f0565b60a08301525060c06176e584828501617626565b60c08301525060e06176f984828501617626565b60e08301525092915050565b6000819050919050565b61771881617705565b811461772357600080fd5b50565b6000813590506177358161770f565b92915050565b60006101808284031215617752576177516175a2565b5b61775c60a06174d7565b9050600061776c8482850161763b565b60008301525061010061778184828501617726565b60208301525061012061779684828501617626565b6040830152506101406177ab84828501617626565b6060830152506101606177c084828501617626565b60808301525092915050565b600080fd5b600080fd5b60008083601f8401126177ec576177eb61745c565b5b8235905067ffffffffffffffff811115617809576178086177cc565b5b602083019150836001820283011115617825576178246177d1565b5b9250929050565b6000806000806101c08587031215617847576178466173e9565b5b600085013567ffffffffffffffff811115617865576178646173ee565b5b61787187828801617574565b94505060206178828782880161773b565b9350506101a085013567ffffffffffffffff8111156178a4576178a36173ee565b5b6178b0878288016177d6565b925092505092959194509250565b6178c781617605565b82525050565b60006020820190506178e260008301846178be565b92915050565b60008083601f8401126178fe576178fd61745c565b5b8235905067ffffffffffffffff81111561791b5761791a6177cc565b5b602083019150836020820283011115617937576179366177d1565b5b9250929050565b6000617949826175a7565b9050919050565b6179598161793e565b811461796457600080fd5b50565b60008135905061797681617950565b92915050565b600080600060408486031215617995576179946173e9565b5b600084013567ffffffffffffffff8111156179b3576179b26173ee565b5b6179bf868287016178e8565b935093505060206179d286828701617967565b9150509250925092565b600080604083850312156179f3576179f26173e9565b5b6000617a0185828601617967565b9250506020617a1285828601617626565b9150509250929050565b60008083601f840112617a3257617a3161745c565b5b8235905067ffffffffffffffff811115617a4f57617a4e6177cc565b5b602083019150836020820283011115617a6b57617a6a6177d1565b5b9250929050565b600080600060408486031215617a8b57617a8a6173e9565b5b600084013567ffffffffffffffff811115617aa957617aa86173ee565b5b617ab586828701617a1c565b93509350506020617ac886828701617967565b9150509250925092565b600060208284031215617ae857617ae76173e9565b5b6000617af6848285016175f0565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b617b2281617aff565b82525050565b60008115159050919050565b617b3d81617b28565b82525050565b617b4c816173f3565b82525050565b600065ffffffffffff82169050919050565b617b6d81617b52565b82525050565b60a082016000820151617b896000850182617b19565b506020820151617b9c6020850182617b34565b506040820151617baf6040850182617b19565b506060820151617bc26060850182617b43565b506080820151617bd56080850182617b64565b50505050565b600060a082019050617bf06000830184617b73565b92915050565b600080600080600060608688031215617c1257617c116173e9565b5b600086013567ffffffffffffffff811115617c3057617c2f6173ee565b5b617c3c888289016177d6565b95509550506020617c4f888289016175f0565b935050604086013567ffffffffffffffff811115617c7057617c6f6173ee565b5b617c7c888289016177d6565b92509250509295509295909350565b60008060208385031215617ca257617ca16173e9565b5b600083013567ffffffffffffffff811115617cc057617cbf6173ee565b5b617ccc858286016177d6565b92509250509250929050565b600080fd5b60006101608284031215617cf457617cf3617cd8565b5b81905092915050565b600060208284031215617d1357617d126173e9565b5b600082013567ffffffffffffffff811115617d3157617d306173ee565b5b617d3d84828501617cdd565b91505092915050565b617d4f81617705565b82525050565b6000602082019050617d6a6000830184617d46565b92915050565b600060208284031215617d8657617d856173e9565b5b6000617d9484828501617967565b91505092915050565b60008060008060608587031215617db757617db66173e9565b5b600085013567ffffffffffffffff811115617dd557617dd46173ee565b5b617de187828801617cdd565b9450506020617df2878288016175f0565b935050604085013567ffffffffffffffff811115617e1357617e126173ee565b5b617e1f878288016177d6565b925092505092959194509250565b617e3681617aff565b82525050565b617e4581617b28565b82525050565b617e54816173f3565b82525050565b617e6381617b52565b82525050565b600060a082019050617e7e6000830188617e2d565b617e8b6020830187617e3c565b617e986040830186617e2d565b617ea56060830185617e4b565b617eb26080830184617e5a565b9695505050505050565b6000819050919050565b6000617ee1617edc617ed784617aff565b617ebc565b617605565b9050919050565b617ef181617ec6565b82525050565b6000602082019050617f0c6000830184617ee8565b92915050565b600082825260208201905092915050565b7f6d757374207370656369667920756e7374616b652064656c6179000000000000600082015250565b6000617f59601a83617f12565b9150617f6482617f23565b602082019050919050565b60006020820190508181036000830152617f8881617f4c565b9050919050565b7f63616e6e6f7420646563726561736520756e7374616b652074696d6500000000600082015250565b6000617fc5601c83617f12565b9150617fd082617f8f565b602082019050919050565b60006020820190508181036000830152617ff481617fb8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061803582617605565b915061804083617605565b925082820190508082111561805857618057617ffb565b5b92915050565b7f6e6f207374616b65207370656369666965640000000000000000000000000000600082015250565b6000618094601283617f12565b915061809f8261805e565b602082019050919050565b600060208201905081810360008301526180c381618087565b9050919050565b7f7374616b65206f766572666c6f77000000000000000000000000000000000000600082015250565b6000618100600e83617f12565b915061810b826180ca565b602082019050919050565b6000602082019050818103600083015261812f816180f3565b9050919050565b600061815161814c618147846173f3565b617ebc565b617605565b9050919050565b61816181618136565b82525050565b600060408201905061817c60008301856178be565b6181896020830184618158565b9392505050565b7f4141393220696e7465726e616c2063616c6c206f6e6c79000000000000000000600082015250565b60006181c6601783617f12565b91506181d182618190565b602082019050919050565b600060208201905081810360008301526181f5816181b9565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561823657808201518184015260208101905061821b565b60008484015250505050565b600061824d826181fc565b6182578185618207565b9350618267818560208601618218565b61827081617466565b840191505092915050565b600060408201905061829060008301856178be565b81810360208301526182a28184618242565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600161016003833603038112618306576183056182da565b5b80830191505092915050565b7f576974686472617720616d6f756e7420746f6f206c6172676500000000000000600082015250565b6000618348601983617f12565b915061835382618312565b602082019050919050565b600060208201905081810360008301526183778161833b565b9050919050565b600061838982617605565b915061839483617605565b92508282039050818111156183ac576183ab617ffb565b5b92915050565b60006183cd6183c86183c3846175a7565b617ebc565b6175a7565b9050919050565b60006183df826183b2565b9050919050565b60006183f1826183d4565b9050919050565b618401816183e6565b82525050565b600060408201905061841c60008301856183f8565b61842960208301846178be565b9392505050565b600081905092915050565b50565b600061844b600083618430565b91506184568261843b565b600082019050919050565b600061846c8261843e565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006184ac601283617f12565b91506184b782618476565b602082019050919050565b600060208201905081810360008301526184db8161849f565b9050919050565b6000823560016060038336030381126184fe576184fd6182da565b5b80830191505092915050565b60008083356001602003843603038112618527576185266182da565b5b80840192508235915067ffffffffffffffff821115618549576185486182df565b5b602083019250602082023603831315618565576185646182e4565b5b509250929050565b6000618578826175c7565b9050919050565b6185888161856d565b811461859357600080fd5b50565b6000813590506185a58161857f565b92915050565b6000602082840312156185c1576185c06173e9565b5b60006185cf84828501618596565b91505092915050565b7f4141393620696e76616c69642061676772656761746f72000000000000000000600082015250565b600061860e601783617f12565b9150618619826185d8565b602082019050919050565b6000602082019050818103600083015261863d81618601565b9050919050565b60008083356001602003843603038112618661576186606182da565b5b80840192508235915067ffffffffffffffff821115618683576186826182df565b5b60208301925060018202360383131561869f5761869e6182e4565b5b509250929050565b600082825260208201905092915050565b6000819050919050565b60006186d160208401846175f0565b905092915050565b6186e2816175c7565b82525050565b60006186f76020840184617626565b905092915050565b61870881617605565b82525050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261873a57618739618718565b5b83810192508235915060208301925067ffffffffffffffff8211156187625761876161870e565b5b60018202360383131561877857618777618713565b5b509250929050565b600082825260208201905092915050565b600061879d8385618780565b93506187aa838584617523565b6187b383617466565b840190509392505050565b600061016083016187d260008401846186c2565b6187df60008601826186d9565b506187ed60208401846186e8565b6187fa60208601826186ff565b50618808604084018461871d565b858303604087015261881b838284618791565b9250505061882c606084018461871d565b858303606087015261883f838284618791565b9250505061885060808401846186e8565b61885d60808601826186ff565b5061886b60a08401846186e8565b61887860a08601826186ff565b5061888660c08401846186e8565b61889360c08601826186ff565b506188a160e08401846186e8565b6188ae60e08601826186ff565b506188bd6101008401846186e8565b6188cb6101008601826186ff565b506188da61012084018461871d565b8583036101208701526188ee838284618791565b9250505061890061014084018461871d565b858303610140870152618914838284618791565b925050508091505092915050565b600061892e83836187be565b905092915050565b6000823560016101600383360303811261895357618952618718565b5b82810191505092915050565b6000602082019050919050565b600061897883856186a7565b93508360208402850161898a846186b8565b8060005b878110156189ce5784840389526189a58284618936565b6189af8582618922565b94506189ba8361895f565b925060208a0199505060018101905061898e565b50829750879450505050509392505050565b60006189ec8385618207565b93506189f9838584617523565b618a0283617466565b840190509392505050565b60006040820190508181036000830152618a2881868861896c565b90508181036020830152618a3d8184866189e0565b905095945050505050565b618a51816175c7565b82525050565b6000602082019050618a6c6000830184618a48565b92915050565b6000618a7d82617605565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203618aaf57618aae617ffb565b5b600182019050919050565b7f41413230206163636f756e74206e6f74206465706c6f79656400000000000000600082015250565b6000618af0601983617f12565b9150618afb82618aba565b602082019050919050565b60006020820190508181036000830152618b1f81618ae3565b9050919050565b600080fd5b600080fd5b60008085851115618b4457618b43618b26565b5b83861115618b5557618b54618b2b565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b6000618bbb8383618b6b565b82618bc68135618b76565b92506014821015618c0657618c017fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802618ba2565b831692505b505092915050565b7f41413330207061796d6173746572206e6f74206465706c6f7965640000000000600082015250565b6000618c44601b83617f12565b9150618c4f82618c0e565b602082019050919050565b60006020820190508181036000830152618c7381618c37565b9050919050565b6000618c87600083617f12565b9150618c928261843b565b600082019050919050565b60006020820190508181036000830152618cb681618c7a565b9050919050565b60006020820190508181036000830152618cd88184866189e0565b90509392505050565b600081519050618cf0816175d9565b92915050565b600060208284031215618d0c57618d0b6173e9565b5b6000618d1a84828501618ce1565b91505092915050565b6000606082019050618d386000830186617d46565b618d456020830185618a48565b618d5260408301846178be565b949350505050565b7f6e6f74207374616b656400000000000000000000000000000000000000000000600082015250565b6000618d90600a83617f12565b9150618d9b82618d5a565b602082019050919050565b60006020820190508181036000830152618dbf81618d83565b9050919050565b7f616c726561647920756e7374616b696e67000000000000000000000000000000600082015250565b6000618dfc601183617f12565b9150618e0782618dc6565b602082019050919050565b60006020820190508181036000830152618e2b81618def565b9050919050565b6000618e3d82617b52565b9150618e4883617b52565b9250828201905065ffffffffffff811115618e6657618e65617ffb565b5b92915050565b6000618e87618e82618e7d84617b52565b617ebc565b617605565b9050919050565b618e9781618e6c565b82525050565b6000602082019050618eb26000830184618e8e565b92915050565b7f4e6f207374616b6520746f207769746864726177000000000000000000000000600082015250565b6000618eee601483617f12565b9150618ef982618eb8565b602082019050919050565b60006020820190508181036000830152618f1d81618ee1565b9050919050565b7f6d7573742063616c6c20756e6c6f636b5374616b652829206669727374000000600082015250565b6000618f5a601d83617f12565b9150618f6582618f24565b602082019050919050565b60006020820190508181036000830152618f8981618f4d565b9050919050565b7f5374616b65207769746864726177616c206973206e6f74206475650000000000600082015250565b6000618fc6601b83617f12565b9150618fd182618f90565b602082019050919050565b60006020820190508181036000830152618ff581618fb9565b9050919050565b7f6661696c656420746f207769746864726177207374616b650000000000000000600082015250565b6000619032601883617f12565b915061903d82618ffc565b602082019050919050565b6000602082019050818103600083015261906181619025565b9050919050565b60006190748385618430565b9350619081838584617523565b82840190509392505050565b600061909a828486619068565b91508190509392505050565b600060c0820190506190bb60008301896178be565b6190c860208301886178be565b6190d56040830187617e5a565b6190e26060830186617e5a565b6190ef6080830185617e3c565b81810360a08301526191018184618242565b9050979650505050505050565b6000619119826181fc565b6191238185618780565b9350619133818560208601618218565b61913c81617466565b840191505092915050565b600060c08301600083015161915f60008601826186ff565b50602083015161917260208601826186ff565b5060408301516191856040860182617b34565b5060608301516191986060860182617b64565b5060808301516191ab6080860182617b64565b5060a083015184820360a08601526191c3828261910e565b9150508091505092915050565b6040820160008201516191e660008501826186ff565b5060208201516191f960208501826186ff565b50505050565b60408201600082015161921560008501826186ff565b50602082015161922860208501826186ff565b50505050565b60608201600082015161924460008501826186d9565b50602082015161925760208501826191ff565b50505050565b60006101408201905081810360008301526192788188619147565b905061928760208301876191d0565b61929460608301866191d0565b6192a160a08301856191d0565b6192ae60e083018461922e565b9695505050505050565b600060e08201905081810360008301526192d28187619147565b90506192e160208301866191d0565b6192ee60608301856191d0565b6192fb60a08301846191d0565b95945050505050565b7f6465706f736974206f766572666c6f7700000000000000000000000000000000600082015250565b600061933a601083617f12565b915061934582619304565b602082019050919050565b600060208201905081810360008301526193698161932d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106193b0576193af619370565b5b50565b60008190506193c18261939f565b919050565b60006193d1826193b3565b9050919050565b6193e1816193c6565b82525050565b60006060820190506193fc60008301866193d8565b818103602083015261940e8185618242565b905061941d60408301846178be565b949350505050565b60008160e01c9050919050565b600060033d11156194515760046000803e61944e600051619425565b90505b90565b600060443d106194e1576194666173df565b60043d036004823e80513d602482011167ffffffffffffffff8211171561948e5750506194e1565b808201805167ffffffffffffffff8111156194ac57505050506194e1565b80602083010160043d0385018111156194c95750505050506194e1565b6194d8826020018501866174a6565b82955050505050505b90565b7f4141353020706f73744f702072657665727465643a2000000000000000000000815250565b600081519050919050565b600081905092915050565b600061952b8261950a565b6195358185619515565b9350619545818560208601618218565b80840191505092915050565b600061955c826194e4565b60168201915061956c8284619520565b915081905092915050565b60006195828261950a565b61958c8185617f12565b935061959c818560208601618218565b6195a581617466565b840191505092915050565b60006040820190506195c560008301856178be565b81810360208301526195d78184619577565b90509392505050565b7f4141353020706f73744f70207265766572740000000000000000000000000000600082015250565b6000619616601283617f12565b9150619621826195e0565b602082019050919050565b600060408201905061964160008301846178be565b818103602083015261965281619609565b905092915050565b7f414135312070726566756e642062656c6f772061637475616c476173436f7374600082015250565b6000619690602083617f12565b915061969b8261965a565b602082019050919050565b60006040820190506196bb60008301846178be565b81810360208301526196cc81619683565b905092915050565b60006080820190506196e960008301876178be565b6196f66020830186617e3c565b61970360408301856178be565b61971060608301846178be565b95945050505050565b7f41413934206761732076616c756573206f766572666c6f770000000000000000600082015250565b600061974f601883617f12565b915061975a82619719565b602082019050919050565b6000602082019050818103600083015261977e81619742565b9050919050565b7f41413430206f76657220766572696669636174696f6e4761734c696d69740000600082015250565b60006197bb601e83617f12565b91506197c682619785565b602082019050919050565b60006040820190506197e660008301846178be565b81810360208301526197f7816197ae565b905092915050565b7f41413234207369676e6174757265206572726f72000000000000000000000000600082015250565b6000619835601483617f12565b9150619840826197ff565b602082019050919050565b600060408201905061986060008301846178be565b818103602083015261987181619828565b905092915050565b7f414132322065787069726564206f72206e6f7420647565000000000000000000600082015250565b60006198af601783617f12565b91506198ba82619879565b602082019050919050565b60006040820190506198da60008301846178be565b81810360208301526198eb816198a2565b905092915050565b7f41413334207369676e6174757265206572726f72000000000000000000000000600082015250565b6000619929601483617f12565b9150619934826198f3565b602082019050919050565b600060408201905061995460008301846178be565b81810360208301526199658161991c565b905092915050565b7f41413332207061796d61737465722065787069726564206f72206e6f7420647560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006199c9602183617f12565b91506199d48261996d565b604082019050919050565b60006040820190506199f460008301846178be565b8181036020830152619a05816199bc565b905092915050565b61010082016000820151619a2460008501826186d9565b506020820151619a3760208501826186ff565b506040820151619a4a60408501826186ff565b506060820151619a5d60608501826186ff565b506080820151619a7060808501826186ff565b5060a0820151619a8360a08501826186d9565b5060c0820151619a9660c08501826186ff565b5060e0820151619aa960e08501826186ff565b50505050565b619ab881617705565b82525050565b61018082016000820151619ad56000850182619a0d565b506020820151619ae9610100850182619aaf565b506040820151619afd6101208501826186ff565b506060820151619b116101408501826186ff565b506080820151619b256101608501826186ff565b50505050565b60006101c0820190508181036000830152619b478186886189e0565b9050619b566020830185619abe565b8181036101a0830152619b698184618242565b905095945050505050565b600081519050619b838161760f565b92915050565b600060208284031215619b9f57619b9e6173e9565b5b6000619bad84828501619b74565b91505092915050565b7f41413935206f7574206f66206761730000000000000000000000000000000000600082015250565b6000619bec600f83617f12565b9150619bf782619bb6565b602082019050919050565b6000604082019050619c1760008301846178be565b8181036020830152619c2881619bdf565b905092915050565b7f4141393020696e76616c69642062656e65666963696172790000000000000000600082015250565b6000619c66601883617f12565b9150619c7182619c30565b602082019050919050565b60006020820190508181036000830152619c9581619c59565b9050919050565b7f41413931206661696c65642073656e6420746f2062656e656669636961727900600082015250565b6000619cd2601f83617f12565b9150619cdd82619c9c565b602082019050919050565b60006020820190508181036000830152619d0181619cc5565b9050919050565b60006060820190508181036000830152619d238187896189e0565b9050619d326020830186618a48565b8181036040830152619d458184866189e0565b90509695505050505050565b6000819050919050565b6000619d76619d71619d6c84619d51565b617ebc565b617605565b9050919050565b619d8681619d5b565b82525050565b6000604082019050619da16000830185619d7d565b8181036020830152619db38184619577565b90509392505050565b7f4141393320696e76616c6964207061796d6173746572416e6444617461000000600082015250565b6000619df2601d83617f12565b9150619dfd82619dbc565b602082019050919050565b60006020820190508181036000830152619e2181619de5565b9050919050565b60006101608301619e3c60008401846186c2565b619e4960008601826186d9565b50619e5760208401846186e8565b619e6460208601826186ff565b50619e72604084018461871d565b8583036040870152619e85838284618791565b92505050619e96606084018461871d565b8583036060870152619ea9838284618791565b92505050619eba60808401846186e8565b619ec760808601826186ff565b50619ed560a08401846186e8565b619ee260a08601826186ff565b50619ef060c08401846186e8565b619efd60c08601826186ff565b50619f0b60e08401846186e8565b619f1860e08601826186ff565b50619f276101008401846186e8565b619f356101008601826186ff565b50619f4461012084018461871d565b858303610120870152619f58838284618791565b92505050619f6a61014084018461871d565b858303610140870152619f7e838284618791565b925050508091505092915050565b60006060820190508181036000830152619fa68186619e28565b9050619fb56020830185617d46565b619fc260408301846178be565b949350505050565b7f414132332072657665727465643a200000000000000000000000000000000000815250565b6000619ffb82619fca565b600f8201915061a00b8284619520565b915081905092915050565b7f4141323320726576657274656420286f72204f4f472900000000000000000000600082015250565b600061a04c601683617f12565b915061a0578261a016565b602082019050919050565b600060408201905061a07760008301846178be565b818103602083015261a0888161a03f565b905092915050565b7f41413231206469646e2774207061792070726566756e64000000000000000000600082015250565b600061a0c6601783617f12565b915061a0d18261a090565b602082019050919050565b600060408201905061a0f160008301846178be565b818103602083015261a1028161a0b9565b905092915050565b7f4141343120746f6f206c6974746c6520766572696669636174696f6e47617300600082015250565b600061a140601f83617f12565b915061a14b8261a10a565b602082019050919050565b6000602082019050818103600083015261a16f8161a133565b9050919050565b7f41413331207061796d6173746572206465706f73697420746f6f206c6f770000600082015250565b600061a1ac601e83617f12565b915061a1b78261a176565b602082019050919050565b600060408201905061a1d760008301846178be565b818103602083015261a1e88161a19f565b905092915050565b600061a20361a1fe846174f2565b6174d7565b90508281526020810184848401111561a21f5761a21e617461565b5b61a22a848285618218565b509392505050565b600082601f83011261a2475761a24661745c565b5b815161a25784826020860161a1f0565b91505092915050565b6000806040838503121561a2775761a2766173e9565b5b600083015167ffffffffffffffff81111561a2955761a2946173ee565b5b61a2a18582860161a232565b925050602061a2b285828601619b74565b9150509250929050565b7f414133332072657665727465643a200000000000000000000000000000000000815250565b600061a2ed8261a2bc565b600f8201915061a2fd8284619520565b915081905092915050565b7f4141333320726576657274656420286f72204f4f472900000000000000000000600082015250565b600061a33e601683617f12565b915061a3498261a308565b602082019050919050565b600060408201905061a36960008301846178be565b818103602083015261a37a8161a331565b905092915050565b7f414131302073656e64657220616c726561647920636f6e737472756374656400600082015250565b600061a3b8601f83617f12565b915061a3c38261a382565b602082019050919050565b600060408201905061a3e360008301846178be565b818103602083015261a3f48161a3ab565b905092915050565b7f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000600082015250565b600061a432601b83617f12565b915061a43d8261a3fc565b602082019050919050565b600060408201905061a45d60008301846178be565b818103602083015261a46e8161a425565b905092915050565b7f4141313420696e6974436f6465206d7573742072657475726e2073656e646572600082015250565b600061a4ac602083617f12565b915061a4b78261a476565b602082019050919050565b600060408201905061a4d760008301846178be565b818103602083015261a4e88161a49f565b905092915050565b7f4141313520696e6974436f6465206d757374206372656174652073656e646572600082015250565b600061a526602083617f12565b915061a5318261a4f0565b602082019050919050565b600060408201905061a55160008301846178be565b818103602083015261a5628161a519565b905092915050565b600060408201905061a57f6000830185618a48565b61a58c6020830184618a48565b939250505056fea26469706673582212206dae6a3dfee854481a79e705a7b23d488634e9bc0aefbf869b89869d4b5e7b1364736f6c63430008110033608060405234801561001057600080fd5b5061044f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004a60048036038101906100459190610288565b610060565b6040516100579190610316565b60405180910390f35b600061007667a77071926199a6bc60c01b610216565b61008a6705db437c17f4c53160c01b610216565b61009e67f7e34fe0ef67d65660c01b610216565b600083836000906014926100b49392919061033b565b906100bf91906103ba565b60601c90506100d8679eee7b10c69e371260c01b610216565b6100ec67e915e597d60e618060c01b610216565b6000848460149080926101019392919061033b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905061015a6759fca45833adea5d60c01b610216565b61016e67d2f649902cd0246260c01b610216565b600061018467957e43ea595585a160c01b610216565b602060008351602085016000875af1905060005193506101ae67a96890a92414c3b460c01b610216565b6101c267936c0d2a6e83afc460c01b610216565b806101f8576101db67cf211eb43cb304cc60c01b610216565b6101ef67f8af295b41c5669760c01b610216565b6000935061020d565b61020c67bedaa80464ace1ed60c01b610216565b5b50505092915050565b50565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261024857610247610223565b5b8235905067ffffffffffffffff81111561026557610264610228565b5b6020830191508360018202830111156102815761028061022d565b5b9250929050565b6000806020838503121561029f5761029e610219565b5b600083013567ffffffffffffffff8111156102bd576102bc61021e565b5b6102c985828601610232565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610300826102d5565b9050919050565b610310816102f5565b82525050565b600060208201905061032b6000830184610307565b92915050565b600080fd5b600080fd5b6000808585111561034f5761034e610331565b5b838611156103605761035f610336565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006103c68383610376565b826103d18135610381565b925060148210156104115761040c7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026103ad565b831692505b50509291505056fea2646970667358221220222219afa35e7a9ea15a12342931ab42e032fb2f8ffc39aeda6c656ef722d50964736f6c63430008110033" = "0x60a0604052604051620000129062000076565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b5073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200006f57600080fd5b5062000084565b61046f806200a67083390190565b60805161a5c9620000a76000396000818161264e0152616e6f015261a5c96000f3fe6080604052600436106101025760003560e01c8063957122ab11610095578063bb9fe6bf11610064578063bb9fe6bf1461034f578063c23a5cea14610366578063d6383f941461038f578063ee219423146103b8578063fc7e286d146103e157610126565b8063957122ab146102a45780639b249f69146102cd578063a6193531146102f6578063b760faf91461033357610126565b80634b1d7cf5116100d15780634b1d7cf5146101d65780635287ce12146101ff57806370a082311461023c5780638f41ec5a1461027957610126565b80630396cb601461012b5780631d732756146101475780631fad948c14610184578063205c2878146101ad57610126565b366101265761011b67bd85ada7de3f843660c01b610422565b61012433610425565b005b600080fd5b6101456004803603810190610140919061742f565b61056d565b005b34801561015357600080fd5b5061016e6004803603810190610169919061782c565b610b04565b60405161017b91906178cd565b60405180910390f35b34801561019057600080fd5b506101ab60048036038101906101a6919061797c565b611044565b005b3480156101b957600080fd5b506101d460048036038101906101cf91906179dc565b611340565b005b3480156101e257600080fd5b506101fd60048036038101906101f89190617a72565b6116a5565b005b34801561020b57600080fd5b5061022660048036038101906102219190617ad2565b61210a565b6040516102339190617bdb565b60405180910390f35b34801561024857600080fd5b50610263600480360381019061025e9190617ad2565b612293565b60405161027091906178cd565b60405180910390f35b34801561028557600080fd5b5061028e612344565b60405161029b91906178cd565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c69190617bf6565b612349565b005b3480156102d957600080fd5b506102f460048036038101906102ef9190617c8b565b612624565b005b34801561030257600080fd5b5061031d60048036038101906103189190617cfd565b612726565b60405161032a9190617d55565b60405180910390f35b61034d60048036038101906103489190617ad2565b610425565b005b34801561035b57600080fd5b5061036461279e565b005b34801561037257600080fd5b5061038d60048036038101906103889190617d70565b612aa2565b005b34801561039b57600080fd5b506103b660048036038101906103b19190617d9d565b612fd2565b005b3480156103c457600080fd5b506103df60048036038101906103da9190617cfd565b61331a565b005b3480156103ed57600080fd5b5061040860048036038101906104039190617ad2565b61389a565b604051610419959493929190617e69565b60405180910390f35b50565b61043967468b4d0eb923786460c01b610422565b61044d67e2dd04761b71021160c01b610422565b6104616739f840fbb98466ea60c01b610422565b61046b8134613933565b61047f672ae9f4c70e9ac82160c01b610422565b6104936780392b76417dd37060c01b610422565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506104e96716b6918eb131153d60c01b610422565b6104fd6782b3f6f7efef9a3060c01b610422565b8173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260000160009054906101000a90046dffffffffffffffffffffffffffff166040516105619190617ef7565b60405180910390a25050565b610581676a63848afe7b25a660c01b610422565b610595678aabda62f45d36d860c01b610422565b6105a967cd2a6344bb8ba41d60c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506105ff6764f9747c720a16ff60c01b610422565b6106136756f07cead6218a0d60c01b610422565b61062767f7e41ffdf6e7b07360c01b610422565b60008263ffffffff1611610670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066790617f6f565b60405180910390fd5b6106846745ba7f8864c4838a60c01b610422565b610698673eb5cba913e1b29a60c01b610422565b6106ac674e10279e834acc5160c01b610422565b6106c067b9b4e84773c481f160c01b610422565b8060010160009054906101000a900463ffffffff1663ffffffff168263ffffffff161015610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071a90617fdb565b60405180910390fd5b61073767e43e0a0e0e0b681b60c01b610422565b61074b67fd842514a971b95360c01b610422565b61075f676e3816719231aed060c01b610422565b60003482600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1661079b919061802a565b90506107b1675a0b2db399659cb660c01b610422565b6107c56714a14fbd67cb18f260c01b610422565b6107d967be3384e9308ba91560c01b610422565b6000811161081c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610813906180aa565b60405180910390fd5b61083067e860cef7076562e860c01b610422565b610844675863f8ef40016f1360c01b610422565b61085867c67ebc2721963fd060c01b610422565b61086c67cde4026bd69782e060c01b610422565b6dffffffffffffffffffffffffffff80168111156108bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b690618116565b60405180910390fd5b6108d36793b6d1c7ed9974a960c01b610422565b6108e767d8267f00f5f9303460c01b610422565b6040518060a001604052808360000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152602001600115158152602001826dffffffffffffffffffffffffffff1681526020018463ffffffff168152602001600065ffffffffffff168152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550602082015181600001600e6101000a81548160ff021916908315150217905550604082015181600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555060608201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550905050610a9b67eb1c85f247f3f58060c01b610422565b610aaf67e4a8c29fd2ae2b1960c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c018285604051610af7929190618167565b60405180910390a2505050565b6000610b1a67db3526811af6d2f660c01b613b0b565b610b2d660512575ad400e160c01b613b0b565b610b41675e28714e8ca8473560c01b613b0b565b60005a9050610b5a67fbf195873194ab0060c01b613b0b565b610b6e6742164649c89ee89360c01b613b0b565b610b8267d32ef2f0c33a85dd60c01b613b0b565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be7906181dc565b60405180910390fd5b610c04676c1ebce823d882a160c01b613b0b565b610c186794845e22e51a4a2060c01b613b0b565b610c2c6780b462b8809afa0c60c01b613b0b565b600085600001519050610c49675ee627e33d5a9d4760c01b613b0b565b610c5d67c5a8ad7eeb6af64760c01b613b0b565b600081604001519050610c7a67b6cf7e4854e6b65a60c01b613b0b565b610c8e6768ef5487dffe40e260c01b613b0b565b610ca2678532b8be333513e760c01b613b0b565b61138882606001518201015a1015610d0657610cc8675f6b6fc26e1d7bcd60c01b613b0b565b610cdc67a0d813c4f9ca49ae60c01b613b0b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b610d1a67e33262b284b9622860c01b613b0b565b610d2e678b199f955efc1b8b60c01b613b0b565b610d4267d69684ddc4dead3960c01b613b0b565b6000610d5867c6aea2abdd90839d60c01b613b0b565b610d6c67daa27416126f734660c01b613b0b565b600089511115610f5d57610d8a67ff0652f47ca0cb8a60c01b613b0b565b610d9e67168087653bef8d4c60c01b613b0b565b610db2673ebcbd10cdc23a5860c01b613b0b565b6000610dc5846000015160008c86613b0e565b9050610ddb67a21eac7e12c81c9760c01b613b0b565b610def6773ed69f4eb5a84e060c01b613b0b565b80610f4257610e0867eb682f232ae0065460c01b613b0b565b610e1c67d09a82d3230f03fd60c01b613b0b565b610e306723ceaaff8c33f04160c01b613b0b565b6000610e3d610800613b4f565b9050610e53678bdf590ff52a5a2b60c01b613b0b565b610e67670588415b92d5232f60c01b613b0b565b600081511115610f0f57610e856762ba2321ed0e69c160c01b613b0b565b610e9967d1620a1ed4dcdc4c60c01b613b0b565b610ead67c0fc5eee94edd58c60c01b613b0b565b846000015173ffffffffffffffffffffffffffffffffffffffff168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610f0292919061827b565b60405180910390a3610f24565b610f236754fe5335162ab15860c01b613b0b565b5b610f38672f681d8c381fda6960c01b613b0b565b6001925050610f57565b610f566737e5eb8f6f7827c360c01b613b0b565b5b50610f72565b610f7167145dbc1ca024fb8660c01b613b0b565b5b610f8667c54267444da43bfc60c01b613b0b565b610f9a67599b3cfa8748f3b560c01b613b0b565b610fae67714bf44ce4a0381860c01b613b0b565b600088608001515a8603019050610fcf6785a90bc90fd0c5a860c01b613b0b565b610fe3679f9fbda8e47ac60460c01b613b0b565b6110356000838b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505085613ba7565b95505050505050949350505050565b61105867480f4be8a88a925660c01b613b0b565b61106c670718d96351a70ff760c01b613b0b565b61108067eda6ec5b72a8799760c01b613b0b565b600083839050905061109c67b8a5229407b3ffe260c01b613b0b565b6110b067454d30fce6f050fe60c01b613b0b565b60008167ffffffffffffffff8111156110cc576110cb617477565b5b60405190808252806020026020018201604052801561110557816020015b6110f2617276565b8152602001906001900390816110ea5790505b50905061111c672afc4210868ecdb260c01b613b0b565b611130679de92eca7afe9efe60c01b613b0b565b6111446783d9fd5825b3bd4760c01b613b0b565b60005b828110156112395761116367b42c932e1dc59b0c60c01b613b0b565b61117767ebaa907adb697f2660c01b613b0b565b600082828151811061118c5761118b6182ab565b5b602002602001015190506111aa670ce811578d6854ee60c01b613b0b565b6111be67b4de2464f4eca8f760c01b613b0b565b6000806111f0848a8a878181106111d8576111d76182ab565b5b90506020028101906111ea91906182e9565b856142e4565b9150915061120867551faaad0f42dec760c01b613b0b565b61121c67d8da3040f57e6e4860c01b613b0b565b61122984838360006147a0565b5050508080600101915050611147565b5061124e675489bf08514b848f60c01b613b0b565b611262676cdf4ed558a4877160c01b613b0b565b600061127867a821cbcf353d70f960c01b613b0b565b61128c67bc17dd3329400a2960c01b613b0b565b60005b83811015611305576112ab67e2f8129ef9d3658f60c01b613b0b565b6112f4818888848181106112c2576112c16182ab565b5b90506020028101906112d491906182e9565b8584815181106112e7576112e66182ab565b5b6020026020010151614b3b565b82019150808060010191505061128f565b5061131a6772b31bd0e942f20b60c01b613b0b565b61132e67b79c5a4cdbbf72fb60c01b613b0b565b6113388482614e11565b505050505050565b61135467560f3e8976c6b86c60c01b610422565b61136867b28c49611e086e9260c01b610422565b61137c67bdb6e574008a0ae360c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506113d26768e81caaf4bf08d260c01b610422565b6113e667dfd1b8104dcc02a360c01b610422565b6113fa671d227a41f8efec8b60c01b610422565b8060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1682111561146b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114629061835e565b60405180910390fd5b61147f67483db2d9f91c75b460c01b610422565b61149367981c38718e2f795260c01b610422565b818160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166114cd919061837e565b8160000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550611517678933eb8a0225346d60c01b610422565b61152b675fa45e9fe98dbcb160c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8484604051611573929190618407565b60405180910390a261158f6749f89ede312291a760c01b610422565b6115a3674c5fe87fce31d59f60c01b610422565b60008373ffffffffffffffffffffffffffffffffffffffff16836040516115c990618461565b60006040518083038185875af1925050503d8060008114611606576040519150601f19603f3d011682016040523d82523d6000602084013e61160b565b606091505b5050905061162367a6213c671f35757e60c01b610422565b611637676742cd98f224910860c01b610422565b61164b6795caee35cc00a57f60c01b610422565b8061168b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611682906184c2565b60405180910390fd5b61169f675622a5e8bd3b0c7760c01b610422565b50505050565b6116b967d45167d0b820409960c01b613b0b565b6116cd67cc35957a153378ca60c01b613b0b565b6116e1674c2989d892e87d0f60c01b613b0b565b60008383905090506116fd672fed84417ef8bfe860c01b613b0b565b6117116796028c97b81dd4ca60c01b613b0b565b6000611727675a4768fd252e3be560c01b613b0b565b61173b67c2c56575af3483b460c01b613b0b565b60005b82811015611a8c5761175a67693f8da5a6e9ab0a60c01b613b0b565b61176e677cda10462919d8e160c01b613b0b565b36868683818110611782576117816182ab565b5b905060200281019061179491906184e2565b90506117aa6705820c78111400f560c01b613b0b565b6117be6741ccf4d47e3583ee60c01b613b0b565b3660008280600001906117d1919061850a565b915091506117e9675a383c333b42a4e160c01b613b0b565b6117fd678f62bf7452b7eca160c01b613b0b565b600083602001602081019061181291906185ab565b9050611828671b309c9a411d1c6b60c01b613b0b565b61183c672799ca0d1fe6dfb260c01b613b0b565b611850670b6ba46882b67fa660c01b613b0b565b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b690618624565b60405180910390fd5b6118d367019aa5bc6cd397ac60c01b613b0b565b6118e767aa1c8bcbd930b1d460c01b613b0b565b6118fb67918ab343fe7e020a60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a3b576119436737f65cd02c2a8b4f60c01b613b0b565b61195767b4dcc864ad0a75ad60c01b613b0b565b61196b678760cc1fdf08e24860c01b613b0b565b8073ffffffffffffffffffffffffffffffffffffffff1663e3563a4f84848780604001906119999190618644565b6040518563ffffffff1660e01b81526004016119b89493929190618a0d565b60006040518083038186803b1580156119d057600080fd5b505afa9250505080156119e1575060015b611a36576119f96758ec6b8342bd3a2560c01b613b0b565b806040517f86a9f750000000000000000000000000000000000000000000000000000000008152600401611a2d9190618a57565b60405180910390fd5b611a50565b611a4f67a4a227a75bcaa00260c01b613b0b565b5b611a64678fc00b99d20e616b60c01b613b0b565b8282905086611a73919061802a565b9550505050508080611a8490618a72565b91505061173e565b50611aa16742ab1a1b4f7ee2ad60c01b613b0b565b611ab56771ab06326a91d17c60c01b613b0b565b60008167ffffffffffffffff811115611ad157611ad0617477565b5b604051908082528060200260200182016040528015611b0a57816020015b611af7617276565b815260200190600190039081611aef5790505b509050611b2167ea43e34cb3b2cd3560c01b613b0b565b611b356771f3173d2348639d60c01b613b0b565b6000611b4b67069f0801d2dbc6c260c01b613b0b565b611b5f671f650b22e651925e60c01b613b0b565b60005b84811015611dc557611b7e6745688aa7c89dd34560c01b613b0b565b611b9267580f3333dbb5da1560c01b613b0b565b36888883818110611ba657611ba56182ab565b5b9050602002810190611bb891906184e2565b9050611bce67ee341f5e72a97a8c60c01b613b0b565b611be267dcdc504a5a96256460c01b613b0b565b366000828060000190611bf5919061850a565b91509150611c0d67269527dec95cb11c60c01b613b0b565b611c216701979335b1e239c960c01b613b0b565b6000836020016020810190611c3691906185ab565b9050611c4c67706611ae2289a1c860c01b613b0b565b611c606743e9efaa7361986960c01b613b0b565b6000838390509050611c7c67809f0c0c8e7b3cff60c01b613b0b565b611c90677fffbda1e029bb3c60c01b613b0b565b60005b81811015611dac57611caf6773bea7e2a81daa4c60c01b613b0b565b611cc367291a7ba8300c92a360c01b613b0b565b6000898981518110611cd857611cd76182ab565b5b60200260200101519050611cf66771698436d6eaf0ed60c01b613b0b565b611d0a67563367cdfd60546260c01b613b0b565b600080611d3c8b898987818110611d2457611d236182ab565b5b9050602002810190611d3691906182e9565b856142e4565b91509150611d54674734362213fb1c0160c01b613b0b565b611d68677416f12f68d4556c60c01b613b0b565b611d74848383896147a0565b611d88677c5f9436e2492bd060c01b613b0b565b8a80611d9390618a72565b9b50505050508080611da490618a72565b915050611c93565b5050505050508080611dbd90618a72565b915050611b62565b50611dda67c16b30149cb0aa3c60c01b613b0b565b611dee67c0fb1faf9fc25f5660c01b613b0b565b6000611e0467e30df2c998e3e67160c01b613b0b565b60009150611e1c67c80b0563cb6f23f360c01b613b0b565b611e3067d2aa27a228f10a6360c01b613b0b565b60005b8581101561206157611e4f67a084dc518274b30f60c01b613b0b565b611e636743256d97934c584560c01b613b0b565b36898983818110611e7757611e766182ab565b5b9050602002810190611e8991906184e2565b9050611e9f67510cbc26f931437260c01b613b0b565b611eb3679ce57f2ae5c49cb960c01b613b0b565b806020016020810190611ec691906185ab565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a2611f1c677274beafcd04754f60c01b613b0b565b611f306730a1207ece35292760c01b613b0b565b366000828060000190611f43919061850a565b91509150611f5b67524efd8f365fdbd760c01b613b0b565b611f6f67c3cec05e9ac4028360c01b613b0b565b6000828290509050611f8b671aea3cc95726cae960c01b613b0b565b611f9f6775ee5a0920f5be5260c01b613b0b565b60005b8181101561204957611fbe67c00d6a090d98dcd260c01b613b0b565b61200788858584818110611fd557611fd46182ab565b5b9050602002810190611fe791906182e9565b8b8b81518110611ffa57611ff96182ab565b5b6020026020010151614b3b565b87612012919061802a565b965061202867b8d9f72bde1b1f2760c01b613b0b565b878061203390618a72565b985050808061204190618a72565b915050611fa2565b5050505050808061205990618a72565b915050611e33565b50612076670517e35055105ac660c01b613b0b565b61208a67a82eba569fb3785460c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a26120e26778b1e1413f5d45f360c01b613b0b565b6120f6671ff04071d095d97d60c01b613b0b565b6121008682614e11565b5050505050505050565b6121126172ae565b61212667af18cba7299e26ad60c01b610422565b61213a679ebf10ec7c30fe3160c01b610422565b61214e6791f79c211959ce6d60c01b610422565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060a00160405290816000820160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815260200160008201600e9054906101000a900460ff1615151515815260200160008201600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815250509050919050565b60006122a967453056944367f73a60c01b610422565b6122bd67d6b0be6190aeaf3560c01b610422565b6122d167f5492b075a6b0a8d60c01b610422565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050919050565b600181565b61235d67b1f1af7bf6ef4bf160c01b613b0b565b61237167c16797003993b99260c01b613b0b565b612385671f4c2029f0795a7860c01b613b0b565b6000858590501480156123af575060008373ffffffffffffffffffffffffffffffffffffffff163b145b1561242b576123c867239c9d28660a0c2a60c01b613b0b565b6123dc67b669dd79727b383560c01b613b0b565b6123f067df142b3fce8a6b3b60c01b613b0b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242290618b06565b60405180910390fd5b61243f672d592b374ca1c03b60c01b613b0b565b612453675a84500c42a4ab9e60c01b613b0b565b61246767138b2b31588d141560c01b613b0b565b601482829050106125ac5761248667910bcbd60a6e36da60c01b613b0b565b61249a679f613af2922d985460c01b613b0b565b6124ae67d3b376958f4f773160c01b613b0b565b600082826000906014926124c493929190618b30565b906124cf9190618baf565b60601c90506124e867829d00569e3e63ff60c01b613b0b565b6124fc67fd232d1f4371ecc760c01b613b0b565b60008173ffffffffffffffffffffffffffffffffffffffff163b036125925761252f67cfd0acef3b8a9c4b60c01b613b0b565b61254367ecca448ac47b240560c01b613b0b565b61255767551cab94402f008460c01b613b0b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258990618c5a565b60405180910390fd5b6125a667c5d9882188d9fe8b60c01b613b0b565b506125c1565b6125c067a6361feedecfec7760c01b613b0b565b5b6125d567eadb46768c67bc0660c01b613b0b565b6125e9677adc2c6b15b8fee460c01b613b0b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b90618c9d565b60405180910390fd5b6126386716e0353279fd0bc160c01b613b0b565b61264c675d6dee4bf91cbea860c01b613b0b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3683836040518363ffffffff1660e01b81526004016126a7929190618cbd565b6020604051808303816000875af11580156126c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ea9190618cf6565b6040517f6ca7b80600000000000000000000000000000000000000000000000000000000815260040161271d9190618a57565b60405180910390fd5b600061273c6798117b896913c24160c01b613b0b565b6127506744f3abd0a14999b860c01b613b0b565b61276467145b145d2a81a8cc60c01b613b0b565b61276d8261500d565b304660405160200161278193929190618d23565b604051602081830303815290604052805190602001209050919050565b6127b267b727bdcaa60faa3460c01b610422565b6127c6677f65868562f2c1f760c01b610422565b6127da6703166387f9301add60c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061283067245e52c9cd0ed5c960c01b610422565b6128446788375c7a9700bb9d60c01b610422565b61285867234386199a1f5d4060c01b610422565b60008160010160009054906101000a900463ffffffff1663ffffffff16036128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ac90618da6565b60405180910390fd5b6128c967608175fd3263809960c01b610422565b6128dd673b540901fbe1608b60c01b610422565b6128f1677b3886cd77d618dc60c01b610422565b61290567ac6c52375ca549b960c01b610422565b80600001600e9054906101000a900460ff16612956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294d90618e12565b60405180910390fd5b61296a6798917dbf2092f49860c01b610422565b61297e67691384b691c8012660c01b610422565b612992676f00f75881e0d11c60c01b610422565b60008160010160009054906101000a900463ffffffff1663ffffffff16426129ba9190618e32565b90506129d067db9f9fbce77d71ae60c01b610422565b808260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550612a0b6703437ed7c3c0f01f60c01b610422565b600082600001600e6101000a81548160ff021916908315150217905550612a3c6725f7a9564c64e84560c01b610422565b612a50674634217d4d2d5c8c60c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a82604051612a969190618e9d565b60405180910390a25050565b612ab6675c449e66a915cc3f60c01b610422565b612aca678b9b5a0a7dfd210a60c01b610422565b612ade67aeae65745692194560c01b610422565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b3467f27b98cae48780a260c01b610422565b612b486778c5ee9b5e93ce7d60c01b610422565b600081600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff169050612b8f674a127222c7585ec160c01b610422565b612ba3675697b8de89fc5b5060c01b610422565b612bb767a42fea213b1cd3fe60c01b610422565b60008111612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190618f04565b60405180910390fd5b612c0e67c670866b0fa843ae60c01b610422565b612c22671e193af69d857ac560c01b610422565b612c3667b8cb3865dea60c1860c01b610422565b612c4a6725bb5e27b1725b2060c01b610422565b60008260010160049054906101000a900465ffffffffffff1665ffffffffffff1611612cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca290618f70565b60405180910390fd5b612cbf672487230840f0a7b560c01b610422565b612cd3671fa143ab50cdda1660c01b610422565b612ce767c80dc0f646e58e2160c01b610422565b612cfb67d78f00466fda8f6a60c01b610422565b428260010160049054906101000a900465ffffffffffff1665ffffffffffff161115612d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5390618fdc565b60405180910390fd5b612d7067047e4ce27fc5edce60c01b610422565b612d84672488ba64f9c6dec060c01b610422565b60008260010160006101000a81548163ffffffff021916908363ffffffff160217905550612dbc67557c3eed50c93d6160c01b610422565b60008260010160046101000a81548165ffffffffffff021916908365ffffffffffff160217905550612df8670e8c2f781dd367c760c01b610422565b600082600001600f6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550612e4467f9f05c06e34d3c2b60c01b610422565b612e5867ddfcc9a075dc351f60c01b610422565b3373ffffffffffffffffffffffffffffffffffffffff167fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda38483604051612ea0929190618407565b60405180910390a2612ebc67bf0c59a6bff89d6d60c01b610422565b612ed067c7734f00106bfd0360c01b610422565b60008373ffffffffffffffffffffffffffffffffffffffff1682604051612ef690618461565b60006040518083038185875af1925050503d8060008114612f33576040519150601f19603f3d011682016040523d82523d6000602084013e612f38565b606091505b50509050612f5067fffde4fe56538fac60c01b610422565b612f64671b0f4978934c967e60c01b610422565b612f78671bcb2d2e59fa189160c01b610422565b80612fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faf90619048565b60405180910390fd5b612fcc679e7eabf637f3c98c60c01b610422565b50505050565b612fe667308e897ec9ac49b860c01b613b0b565b612ffa6746afd6154958d48760c01b613b0b565b61300e677943f5e49edb6c9060c01b613b0b565b613016617276565b61302a676b399b53e069a3a660c01b613b0b565b61303e67fd10b936731b4f9160c01b613b0b565b61304785615062565b61305b6740a63cbe3b28ab0f60c01b613b0b565b61306f673f895508e0d540a060c01b613b0b565b60008061307e600088856142e4565b915091506130966704eff507f83465d260c01b613b0b565b6130aa67302f1aa4c836323160c01b613b0b565b60006130b6838361522a565b90506130cc67e88deff7702581ef60c01b613b0b565b6130e067b25c829d6a16e4aa60c01b613b0b565b6130e86155a4565b6130fc67ea6ea2511b8d632760c01b613b0b565b613110673432152ca7835c3e60c01b613b0b565b600061311e60008a87614b3b565b905061313467a76dc2db7071bdb360c01b613b0b565b61314867746f7d9f4d57669460c01b613b0b565b6131506155a4565b6131646786c06cf5574ba78e60c01b613b0b565b613178675d95101420b09df260c01b613b0b565b600061318e673f929187b4c9082d60c01b613b0b565b6131a2679d6f362de5986eb960c01b613b0b565b60606131b8676649d6a2c518852d60c01b613b0b565b6131cc67cc9da580bdacbbe560c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161461329e57613213661447dbcfd5837660c01b613b0b565b61322767f22079f9dd8dfecb60c01b613b0b565b8973ffffffffffffffffffffffffffffffffffffffff16898960405161324e92919061908d565b6000604051808303816000865af19150503d806000811461328b576040519150601f19603f3d011682016040523d82523d6000602084013e613290565b606091505b5080925081935050506132b3565b6132b267d90f8e732302d9f460c01b613b0b565b5b6132c767b42cc8f96635c06860c01b613b0b565b8660800151838560200151866040015185856040517f8b7ac980000000000000000000000000000000000000000000000000000000008152600401613311969594939291906190a6565b60405180910390fd5b61332e67adebb93f041c28da60c01b613b0b565b613342674d0c930f5ff7318060c01b613b0b565b61335667a72d90442325d8a760c01b613b0b565b61335e617276565b61337267ca99458f9089f9cc60c01b613b0b565b61338667da0268cca058caeb60c01b613b0b565b61338f82615062565b6133a367f2cc202fae4e6d2860c01b613b0b565b6133b7676b890ebe4d93dd6760c01b613b0b565b6000806133c6600085856142e4565b915091506133de6798724490aedc5f6d60c01b613b0b565b6133f26777f8798bf1f0265e60c01b613b0b565b6000613405846000015160a001516155d2565b905061341b67bd452490c91954fb60c01b613b0b565b61342f673978756d1524ccc960c01b613b0b565b60006134428560000151600001516155d2565b9050613458677acbcb2f5ef3302660c01b613b0b565b61346c6729be7955feddb26060c01b613b0b565b61347461730d565b61348867f3272f3fb8dc76ea60c01b613b0b565b61349c67b004d9dd5d9e395460c01b613b0b565b6134b067bd5cc9bc63e18e7860c01b613b0b565b3660008880604001906134c39190618644565b915091506134db6759902901f5fc97d660c01b613b0b565b6134ef67050405a1d1e226dd60c01b613b0b565b6000601483839050101580156135155750613514674e71178c7f8d1dd360c01b6156e2565b5b80613530575061352f67647e7e719dd3403760c01b6156ed565b5b61353b57600061355e565b828260009060149261354f93929190618b30565b9061355a9190618baf565b60601c5b905061357467d9dc24b09e2c744060c01b613b0b565b61357d816155d2565b935050505061359667fd1dd0e4fb8dd7ac60c01b613b0b565b6135aa677f3a7f298afe405860c01b613b0b565b60006135b6868661522a565b90506135cc67c748266f190cdd6f60c01b613b0b565b6135e0679811ad866476a4e760c01b613b0b565b6000816000015190506135fd67bff7b97a6411a26a60c01b613b0b565b61361167bbbcd46e34937d7160c01b613b0b565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061365967f56f2c6435ad476560c01b613b0b565b61366d6701c07411d06e812460c01b613b0b565b60006040518060c001604052808b6080015181526020018b6040015181526020018315158152602001856020015165ffffffffffff168152602001856040015165ffffffffffff1681526020016136c78c606001516156f4565b81525090506136e0674d18487e1344149a60c01b613b0b565b6136f4673887d13a5d72e38260c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561375e5750600173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561382f5761377767c9dee408325af2cc60c01b613b0b565b61378b67d87ebd31eb97f10860c01b613b0b565b61379f6788c5110cc116a3a260c01b613b0b565b600060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020016137d1866155d2565b81525090506137ea67aafeb9832d13176a60c01b613b0b565b8187878a846040517ffaecb4e400000000000000000000000000000000000000000000000000000000815260040161382695949392919061925d565b60405180910390fd5b61384367b59d5f7f376aa49b60c01b613b0b565b61385767bd0e2364c61bc38560c01b613b0b565b808686896040517fe0cff05f00000000000000000000000000000000000000000000000000000000815260040161389194939291906192b8565b60405180910390fd5b60006020528060005260406000206000915090508060000160009054906101000a90046dffffffffffffffffffffffffffff169080600001600e9054906101000a900460ff169080600001600f9054906101000a90046dffffffffffffffffffffffffffff16908060010160009054906101000a900463ffffffff16908060010160049054906101000a900465ffffffffffff16905085565b61394767641b16ec65b6a68a60c01b610422565b61395b677bc0adde2d418a7060c01b610422565b61396f67882a2e6265487f8060c01b610422565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506139c567a859bcc12ff4ca1b60c01b610422565b6139d967333c6fae9efbfe3560c01b610422565b6000828260000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16613a15919061802a565b9050613a2b677a9b7bf552fadc3360c01b610422565b613a3f67dc5d7b6a53eb99c660c01b610422565b613a536737910712e61ec37c60c01b610422565b6dffffffffffffffffffffffffffff8016811115613aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9d90619350565b60405180910390fd5b613aba67cd0f0402a9a2515360c01b610422565b613ace67495b2fc5f8d7b4a560c01b610422565b808260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff16021790555050505050565b50565b6000613b24672fcf8105fec3df7b60c01b615726565b613b386722473413de3c15fc60c01b615726565b600080845160208601878987f19050949350505050565b6060613b6567303f3b4426b9544e60c01b615726565b613b79677f275f50bcc460f960c01b615726565b3d82811115613b86578290505b604051602082018101604052818152816000602083013e8092505050919050565b6000613bbd676b7dccbe8d01c1b360c01b613b0b565b613bd167c914c7e4eb9527dd60c01b613b0b565b613be567bd9e241408179e3e60c01b613b0b565b60005a9050613bfe670528d035eb11ccd960c01b613b0b565b613c12678232911969024b1e60c01b613b0b565b613c2667f254d0853ab9151860c01b613b0b565b6000613c3c67c866fe45a820868d60c01b613b0b565b613c50674250def80b9cdffa60c01b613b0b565b600086600001519050613c6d67a4034fd86be7493260c01b613b0b565b613c816779f4f5f41e09e1f560c01b613b0b565b6000613c8c82615729565b9050613ca267dac9783205b79b5060c01b613b0b565b613cb667a9f6622ab8b1df7760c01b613b0b565b60008260a001519050613cd3676e86f8ae258d31fc60c01b613b0b565b613ce767190233c50b822bad60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613d4f57613d2f67d82973dd8b5e756a60c01b613b0b565b613d436705c1feb00d338ee160c01b613b0b565b82600001519350614098565b613d6367bcda3e6439d8dc5160c01b613b0b565b613d7767cae11a430f67971760c01b613b0b565b809350613d8e67d7ffeaae933a36d060c01b613b0b565b613da267adaeb70358f5b14860c01b613b0b565b60008851111561408257613dc0676df70878573bf74b60c01b613b0b565b613dd4679762e536b54aba4260c01b613b0b565b8187029550613ded67f077938fa615dd5060c01b613b0b565b613e0167c99b393c8303c05a60c01b613b0b565b600280811115613e1457613e13619370565b5b8a6002811115613e2757613e26619370565b5b14613ee257613e406792a4c43819ceb85e60c01b613b0b565b613e546715f5372c9a665beb60c01b613b0b565b613e6867acea0271fb902f8d60c01b613b0b565b8073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b8152600401613eaa939291906193e7565b600060405180830381600088803b158015613ec457600080fd5b5087f1158015613ed8573d6000803e3d6000fd5b505050505061407d565b613ef6675c81ea4ed2050e2a60c01b613b0b565b613f0a67b7962f99fce57f7060c01b613b0b565b613f1e67db7246cce1a7934560c01b613b0b565b8073ffffffffffffffffffffffffffffffffffffffff1663a9a2340984606001518c8b8a6040518563ffffffff1660e01b8152600401613f60939291906193e7565b600060405180830381600088803b158015613f7a57600080fd5b5087f193505050508015613f8c575060015b61407c57613f98619432565b806308c379a0036140295750613fac619454565b80613fb7575061402b565b613fcb6727cbaddc4df8e08e60c01b613b0b565b8b81604051602001613fdd9190619551565b6040516020818303038152906040526040517f220266b60000000000000000000000000000000000000000000000000000000081526004016140209291906195b0565b60405180910390fd5b505b61403f67146b4887806fe10b60c01b613b0b565b8a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614073919061962c565b60405180910390fd5b5b614097565b61409667e06ee38d2d3dbf4260c01b613b0b565b5b5b6140ac676f5dbd21c9125cd860c01b613b0b565b5a8503870196506140c7679a948bc5f171402a60c01b613b0b565b81870295506140e06710d5f3f58edb5dd060c01b613b0b565b6140f46725c8ddccd2a1e2a260c01b613b0b565b858960400151101561416557614114673818924813f43e5260c01b613b0b565b6141286792b7decf890025c960c01b613b0b565b8a6040517f220266b600000000000000000000000000000000000000000000000000000000815260040161415c91906196a6565b60405180910390fd5b614179674e6856a4e466aef260c01b613b0b565b61418d67d6c35d57572b966260c01b613b0b565b6141a1676f729716f62a808760c01b613b0b565b6000868a604001510390506141c0676d15de463b359f1c60c01b613b0b565b6141d46771b7ab82d62d097e60c01b613b0b565b6141de8582613933565b6141f16679db7ebbddfe4460c01b613b0b565b61420567e86c122c2992c0e560c01b613b0b565b600080600281111561421a57614219619370565b5b8c600281111561422d5761422c619370565b5b149050614244677efc529e88ddb75560c01b613b0b565b61425867c9be395154365aea60c01b613b0b565b8460a0015173ffffffffffffffffffffffffffffffffffffffff16856000015173ffffffffffffffffffffffffffffffffffffffff168c602001517f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f8860200151858d8f6040516142cc94939291906196d4565b60405180910390a45050505050505095945050505050565b6000806142fb67d34039aa0eb98c0960c01b613b0b565b61430f67a2181ff15855e33660c01b613b0b565b614323674f71979477c58c0260c01b613b0b565b60005a905061433c674f3e95a6ed4f6b5c60c01b613b0b565b614350671548a9d28bcff14b60c01b613b0b565b60008460000151905061436d67c9be5937a3943cc660c01b613b0b565b6143816758083866582be81060c01b613b0b565b61438b868261587c565b61439f67acd417f7c00b05ee60c01b613b0b565b6143a886612726565b8560200181815250506143c567afe5ef3d1d5b4e1a60c01b613b0b565b6143d9674f702fee37dcbfb160c01b613b0b565b60008661010001358760e0013583604001518460600151856080015117171717905061440f67e8d5a024d52514cb60c01b613b0b565b6144236770f91e936fc96c3b60c01b613b0b565b614437671f7dbd98090f551c60c01b613b0b565b6effffffffffffffffffffffffffffff801681111561448b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161448290619765565b60405180910390fd5b61449f679f62e1c6356d897e60c01b613b0b565b6144b367c4e70ab68d1a143960c01b613b0b565b6144c767c024a9b41cfafa7b60c01b613b0b565b60006144dd673d278ceaae9da29260c01b613b0b565b6144f167eeebf912e8fa4d4560c01b613b0b565b60006144fc84615bb4565b905061451267944a669b823630a660c01b613b0b565b61451e8a8a8a84615ce9565b809850819350505061453a672778705697a3977f60c01b613b0b565b61454e67e32c1dea5c52d0a260c01b613b0b565b6145566155a4565b61456a673f4c9e91048b950d60c01b613b0b565b61457e67e926034c4f53607360c01b613b0b565b6060614594670ea6529725653f1e60c01b613b0b565b6145a867955e6f66cb6400b660c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168560a0015173ffffffffffffffffffffffffffffffffffffffff1614614622576145f467ad071a44a92945a760c01b613b0b565b61460867a4cf53b3e8c9c3d460c01b613b0b565b6146158b8b8b85876163b0565b8098508192505050614637565b614636675108d43cde40cef460c01b613b0b565b5b61464b67b6ced13152ad086660c01b613b0b565b61465f67374f6f1e5358cd8f60c01b613b0b565b614673670652c7dd31993eb260c01b613b0b565b60005a8703905061468e678787f1dfcb14d78160c01b613b0b565b6146a2674fff11e75095ecf760c01b613b0b565b808b60a001351015614713576146c267b6ad64f0ab06bd8360c01b613b0b565b6146d6677e3c403c9d7eebd760c01b613b0b565b8b6040517f220266b600000000000000000000000000000000000000000000000000000000815260040161470a91906197d1565b60405180910390fd5b61472767486710f8ebff249e60c01b613b0b565b61473b67472da05a38066eaa60c01b613b0b565b828a60400181815250506147596773e329a6db5ba88360c01b613b0b565b614762826168c7565b8a606001818152505061477f672ecdde0ebb1f8ef960c01b613b0b565b8a60c001355a8803018a608001818152505050505050505050935093915050565b6147b4674d137f3badf8ea9660c01b613b0b565b6147c8676fa0d92ceccb5a2a60c01b613b0b565b6147dc673b2714f3b47d62dc60c01b613b0b565b6000806147e8856168f9565b91509150614800673e1b0c9df74a838f60c01b613b0b565b614814674284769e521acdfe60c01b613b0b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146148ac5761485b67999d03d25266223d60c01b613b0b565b61486f67160271be6e43056060c01b613b0b565b856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016148a3919061984b565b60405180910390fd5b6148c06746288d5b7730fc0f60c01b613b0b565b6148d4670621ff31260af8f860c01b613b0b565b6148e8673f71452c68a3856f60c01b613b0b565b80156149535761490267e32f67b676bbc2c860c01b613b0b565b61491667efa3849e8647f22b60c01b613b0b565b856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161494a91906198c5565b60405180910390fd5b6149676775e74b25646337da60c01b613b0b565b61497b673041f334f105bbcc60c01b613b0b565b61498f6772a50700a0abbcec60c01b613b0b565b60006149a5672fd487ba5e39b45e60c01b613b0b565b6149ae856168f9565b80935081925050506149ca6748ccb3962c4b88e260c01b613b0b565b6149de673a59b5d47e6b315b60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614a7757614a266796027ee26ef1bdd160c01b613b0b565b614a3a672377b5c640dca54460c01b613b0b565b866040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614a6e919061993f565b60405180910390fd5b614a8b6720c4adeca4b97c2f60c01b613b0b565b614a9f675a62abfc40a7be0f60c01b613b0b565b614ab367bb216ff411c11cd660c01b613b0b565b8115614b1e57614acd67c507a302a88d010a60c01b613b0b565b614ae16753c5dc6542460b6c60c01b613b0b565b866040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614b1591906199df565b60405180910390fd5b614b326719adbd2e485c39ed60c01b613b0b565b50505050505050565b6000614b51670528304b9a4e276660c01b613b0b565b614b65671dc140e2ccab3fd260c01b613b0b565b614b7967b1fb421bdae9b06560c01b613b0b565b60005a9050614b926773c737e49b0ea73f60c01b613b0b565b614ba667bbe717af0b97d78660c01b613b0b565b6000614bb584606001516156f4565b9050614bcb670b031524c09bd43560c01b613b0b565b614bdf67dd83a019dc10b8a760c01b613b0b565b3073ffffffffffffffffffffffffffffffffffffffff16631d732756868060600190614c0b9190618644565b87856040518563ffffffff1660e01b8152600401614c2c9493929190619b2b565b6020604051808303816000875af1925050508015614c6857506040513d601f19601f82011682018060405250810190614c659190619b89565b60015b614def57614c8067ee73b3f231df63cd60c01b613b0b565b614c94673df6104dd8c6a59f60c01b613b0b565b6000614caa67b6b64d39ea0f734160c01b613b0b565b60206000803e6000519050614cc967766ce98d80aa790960c01b613b0b565b614cdd677458a05b861c89c760c01b613b0b565b7fdeaddead000000000000000000000000000000000000000000000000000000008103614d6957614d1867b9a9e7f3da56988660c01b613b0b565b614d2c67156d16e5b508173660c01b613b0b565b866040517f220266b6000000000000000000000000000000000000000000000000000000008152600401614d609190619c02565b60405180910390fd5b614d7d673ee36b6cc848591160c01b613b0b565b614d9167353fe0d2f8fbd62460c01b613b0b565b614da56778239086464ad93560c01b613b0b565b600085608001515a85614db8919061837e565b614dc2919061802a565b9050614dd8671f888209a792f39360c01b613b0b565b614de6886002888685613ba7565b94505050614e08565b614e0367ae9ba21330eb831060c01b613b0b565b809350505b50509392505050565b614e2567ce4eaf1e3ecebc0a60c01b613b0b565b614e39678e806c1eb151833360c01b613b0b565b614e4d671b9353e0132c568860c01b613b0b565b614e61674f109bdea6b6dd4060c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603614ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ec790619c7c565b60405180910390fd5b614ee46786cdbf06ae0d6c9960c01b613b0b565b614ef8679a4fd059eeb243bf60c01b613b0b565b614f0c6755929728ee06af6e60c01b613b0b565b60008273ffffffffffffffffffffffffffffffffffffffff1682604051614f3290618461565b60006040518083038185875af1925050503d8060008114614f6f576040519150601f19603f3d011682016040523d82523d6000602084013e614f74565b606091505b50509050614f8c672c7ae608d7ee218660c01b613b0b565b614fa067632c47631756cf7960c01b613b0b565b614fb467fa7aba00a44115ad60c01b613b0b565b80614ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614feb90619ce8565b60405180910390fd5b61500867c324c947c6690a3760c01b613b0b565b505050565b6000615023676ef62f88472d66ea60c01b616a2e565b61503767b557b889e8f81d6f60c01b616a2e565b61504b67656ff2fa1b6bb2b760c01b616a2e565b61505482616a31565b805190602001209050919050565b6150766726d7141481ab323560c01b613b0b565b61508a676e07210c39e4486260c01b613b0b565b61509e67a5955441815976cb60c01b613b0b565b3073ffffffffffffffffffffffffffffffffffffffff1663957122ab8280604001906150ca9190618644565b8460000160208101906150dd9190617ad2565b858061012001906150ee9190618644565b6040518663ffffffff1660e01b815260040161510e959493929190619d08565b60006040518083038186803b15801561512657600080fd5b505afa925050508015615137575060015b61522657615143619432565b806308c379a0036152155750615157619454565b806151625750615217565b615176678ad6c6220dff946760c01b613b0b565b61518a673edaf9b29bc58cfa60c01b613b0b565b60008151146151fb576151a76791345e2a34de5be160c01b613b0b565b6151bb6751e54c767bab910360c01b613b0b565b6000816040517f220266b60000000000000000000000000000000000000000000000000000000081526004016151f2929190619d8c565b60405180910390fd5b61520f67936ff6bb34bef0d560c01b613b0b565b50615221565b505b3d6000803e3d6000fd5b615227565b5b50565b615232617327565b61524667e69f7455fa7a07b360c01b616ac3565b61525a67b4cd7af03ea2c5fa60c01b616ac3565b61526e67ada53efb1dfccb7760c01b616ac3565b600061527984616ac6565b905061528f674d0f716f7bcb7b9260c01b616ac3565b6152a367d63d53a2153b304860c01b616ac3565b60006152ae84616ac6565b90506152c46722fc217c8bb3a21260c01b616ac3565b6152d867d43a06a00665043560c01b616ac3565b6000826000015190506152f567151bc2b1c770894460c01b616ac3565b6153096732841106c226c6e260c01b616ac3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361537157615351671aace643f445af3c60c01b616ac3565b61536567b767f16e441c791560c01b616ac3565b81600001519050615386565b6153856721f72ae527759e0160c01b616ac3565b5b61539a67976cb73ee93faf4060c01b616ac3565b6153ae67fbc1cf9b45ac9e0560c01b616ac3565b6000836020015190506153cb675ae02cf73427453160c01b616ac3565b6153df672f3e3d635ca3dee260c01b616ac3565b6000846040015190506153fc67d85c8bdd30a53c2060c01b616ac3565b61541067479ce7ff317d61d960c01b616ac3565b60008460200151905061542d6748cd0366f66a74d660c01b616ac3565b61544167233a1ba95415d76360c01b616ac3565b60008560400151905061545e67f891c3f91e3987cf60c01b616ac3565b61547267ee2ac2151246907660c01b616ac3565b8165ffffffffffff168465ffffffffffff1610156154a65761549e677765bdded08f417460c01b616ac3565b8193506154bb565b6154ba673db76e2382591bc460c01b616ac3565b5b6154cf67bbd9ea227d2e8b6160c01b616ac3565b6154e367269600f4d05d62c160c01b616ac3565b8065ffffffffffff168365ffffffffffff1611156155175761550f67769c64441515ae4760c01b616ac3565b80925061552c565b61552b6792508f8b38fce31860c01b616ac3565b5b61554067c4465d6321fbb3e560c01b616ac3565b61555467d764ee64c31d59fd60c01b616ac3565b60405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020018565ffffffffffff1681526020018465ffffffffffff1681525097505050505050505092915050565b6155b867af03e0b4035ea55660c01b613b0b565b6155cc67c9620b9c790e33cb60c01b613b0b565b43600052565b6155da61730d565b6155ee67ddd75e05ea2d470b60c01b610422565b6156026714178d6d1eec377660c01b610422565b61561667ed0c0f5c0a4f897960c01b610422565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061566c6796c6174e6db8a70c60c01b610422565b80600001600f9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168260000181815250506156b867a2474a1809029c6460c01b610422565b8060010160009054906101000a900463ffffffff1663ffffffff1682602001818152505050919050565b600060019050919050565b6000919050565b606061570a678ccfdf63a27f24a160c01b613b0b565b61571e67ec4fc9a45c4cbeda60c01b613b0b565b819050919050565b50565b600061573f6723710d455cbd1fc260c01b613b0b565b615753678552644400882c5660c01b613b0b565b61576767acd0ff56e29caf5760c01b613b0b565b61577b6790173f487bf921c360c01b613b0b565b60008260c0015190506157986788011b89016c87e660c01b613b0b565b6157ac67eabe9d1df1872cb860c01b613b0b565b60008360e0015190506157c96780eabf868b5a2d7860c01b613b0b565b6157dd673a9f497be6de2ad960c01b613b0b565b80820361582a576157f8678e77373db57e0bad60c01b613b0b565b61580c67e9b1eb10be1bde8160c01b613b0b565b615820671cf2ad91872d569360c01b613b0b565b8192505050615877565b61583e67e69ed61328bcf05760c01b613b0b565b61585267f003812ff22f97f660c01b613b0b565b6158666780449873cf826ce860c01b613b0b565b61587282488301616c67565b925050505b919050565b6158906794398c88f005709f60c01b613b0b565b6158a4672b03b3419c14484c60c01b613b0b565b8160000160208101906158b79190617ad2565b816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506159026793d9e770a6faaa2f60c01b613b0b565b816020013581602001818152505061592467139dbe991306ae9c60c01b613b0b565b816080013581604001818152505061594667f0718aa2010e8b9560c01b613b0b565b8160a0013581606001818152505061596867ad45b8a29a93eeab60c01b613b0b565b8160c0013581608001818152505061598a67466bf6fad93902ac60c01b613b0b565b8160e001358160c00181815250506159ac672b132ec41befa5cd60c01b613b0b565b8161010001358160e00181815250506159cf67dd742c4ce53972e660c01b613b0b565b6159e36763014b2d1488f93260c01b613b0b565b366000838061012001906159f79190618644565b91509150615a0f676a2e7bfc8710069c60c01b613b0b565b615a236780511592895b61c960c01b613b0b565b6000828290501115615b4c57615a4367eb7fb348aa1ce84260c01b613b0b565b615a576744ab1d52d3a7326f60c01b613b0b565b615a6b675c26b2f94c28f87460c01b613b0b565b615a7f679001d1e1aa36379560c01b613b0b565b6014828290501015615ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615abd90619e08565b60405180910390fd5b615ada6790a6340ef2e7fe5560c01b613b0b565b615aee67d6fdc4d38c3f1d0a60c01b613b0b565b8181600090601492615b0293929190618b30565b90615b0d9190618baf565b60601c8360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050615bae565b615b606726722d51917cb4b860c01b613b0b565b615b7467b81fb2bb3b12cb4d60c01b613b0b565b60008360a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b50505050565b6000615bca67aad98d6154acdcd760c01b613b0b565b615bde67b73e465bf9e52b6160c01b613b0b565b615bf267f10067438ecb862a60c01b613b0b565b615c0667c4a4fe6ede678b5760c01b613b0b565b60008073ffffffffffffffffffffffffffffffffffffffff168360a0015173ffffffffffffffffffffffffffffffffffffffff1614158015615c585750615c5767d835fc68629f38cd60c01b6156e2565b5b80615c735750615c7267117b2d6966bdaf0160c01b6156ed565b5b615c7e576001615c81565b60035b60ff169050615c9a67700816a1e3bb6d7060c01b613b0b565b615cae6744c1d1938606be1b60c01b613b0b565b6000836080015182856060015102856040015101019050615cd9671f763ace8f3bd88260c01b613b0b565b8360c00151810292505050919050565b600080615d0067d4e9699b2987ab0760c01b613b0b565b615d14675d8d1e834eef448f60c01b613b0b565b615d28672a8009d8c4675d0060c01b613b0b565b615d3c67d1a16c3013ed626460c01b613b0b565b60005a9050615d55672177cad0712c948960c01b613b0b565b615d6967df910ae4468fb24e60c01b613b0b565b600085600001519050615d8667c0879bee2d658afa60c01b613b0b565b615d9a67feb8ebb8a16f14c160c01b613b0b565b600081600001519050615db7670f5581ebd890213060c01b613b0b565b615dcb67f731688142019ef360c01b613b0b565b615de589888a8060400190615de09190618644565b616cf3565b615df967716d94d66ad0a57c60c01b613b0b565b615e0d671a28f26b5f8bf60360c01b613b0b565b60008260a001519050615e2a6729383920594cbefd60c01b613b0b565b615e3e67a10f5e1e6e0cc5f160c01b613b0b565b615e466155a4565b615e5a6733ca9099d32a694360c01b613b0b565b615e6e67356738e8d94640f260c01b613b0b565b6000615e8467f63877a5811722d860c01b613b0b565b615e9867b3c691595510b94960c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603615f7a57615ee067ce50778bc4ab94f860c01b613b0b565b615ef4678727f7e2a4b5b24960c01b613b0b565b615f0867dd1f12ecfec9826660c01b613b0b565b6000615f1384612293565b9050615f29676f78bed3432c062760c01b613b0b565b8881118015615f485750615f476749348aa66d657c5460c01b6156e2565b5b80615f635750615f6267e1b4631d968b658a60c01b6156ed565b5b615f6f57808903615f72565b60005b915050615f8f565b615f8e67277fbdb87062126f60c01b613b0b565b5b615fa3679b9f439e0fe1fd8760c01b613b0b565b615fb7676295b15d043a50e760c01b613b0b565b8273ffffffffffffffffffffffffffffffffffffffff16633a871cdd85606001518c8c60200151856040518563ffffffff1660e01b8152600401615ffd93929190619f8c565b60206040518083038160008887f19350505050801561603a57506040513d601f19601f820116820180604052508101906160379190619b89565b60015b61612a57616046619432565b806308c379a0036160d7575061605a619454565b8061606557506160d9565b61607967af349b3257cee67a60c01b613b0b565b8b8160405160200161608b9190619ff0565b6040516020818303038152906040526040517f220266b60000000000000000000000000000000000000000000000000000000081526004016160ce9291906195b0565b60405180910390fd5b505b6160ed6749f99c326384549e60c01b613b0b565b8a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616121919061a062565b60405180910390fd5b61613e67b542a0d7e71e5c8c60c01b613b0b565b8096505061615667a32d24326b1c513a60c01b613b0b565b61616a673182b8e917179af560c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603616374576161b267d40966d106ca1f5760c01b613b0b565b6161c667571f1ba350ae084a60c01b613b0b565b6161da670b792efad629a34560c01b613b0b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050616230670aab76fae7ce329860c01b613b0b565b616244674898c4c8721c6a3360c01b613b0b565b60008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905061628b67939153321635a50460c01b613b0b565b61629f67ba578c349170678360c01b613b0b565b808a111561630c576162bb67888110dcc13924a960c01b613b0b565b6162cf678ba8141c00e1655b60c01b613b0b565b8c6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616303919061a0dc565b60405180910390fd5b61632067b6199e7bfd865bf760c01b613b0b565b616334676cb4afd9c3644be460c01b613b0b565b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505050616389565b6163886707bc50531c774ab760c01b613b0b565b5b61639d67171a32dcde207a7560c01b613b0b565b5a85039650505050505094509492505050565b606060006163c8675abf7e4ac0e494db60c01b613b0b565b6163dc67aa1a5efdea46787f60c01b613b0b565b6163f067c3a27ebce7e1f4d560c01b613b0b565b616404674ba0c76546e38a7360c01b613b0b565b60008560000151905061642167f6d1634a9dbac5d560c01b613b0b565b616435676826ba9160765dfd60c01b613b0b565b600081606001519050616452671294154b32167c9760c01b613b0b565b616466672e05d8ba9e541b5860c01b613b0b565b61647a67f25cf8fae769115960c01b613b0b565b8481116164bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016164b39061a156565b60405180910390fd5b6164d06762aeaad29e31b57660c01b613b0b565b6164e467aeda739beecf882b60c01b613b0b565b6164f8678c0a9d287bf901aa60c01b613b0b565b6000858203905061651367ab13dece76541fa960c01b613b0b565b6165276703242ac27d96239460c01b613b0b565b60008360a00151905061654467e064ed7711e4f44160c01b613b0b565b61655867bb123bccc54e13cc60c01b613b0b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506165ae6731703428f7c074ed60c01b613b0b565b6165c267ac6c000120bac21a60c01b613b0b565b60008160000160009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16905061660967af23c4bd6be76ee060c01b613b0b565b61661d67cd839a6f0c36e7ba60c01b613b0b565b8981101561668a5761663967d2cc586f1fba6ede60c01b613b0b565b61664d671630900ed293652460c01b613b0b565b8c6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616681919061a1c2565b60405180910390fd5b61669e677b787fd8d0eec8fc60c01b613b0b565b6166b2677965fa12a09ffed060c01b613b0b565b8981038260000160006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055506166ff67c9536eaa4d6b721b60c01b613b0b565b616713673f97a3760e8e42d560c01b613b0b565b8273ffffffffffffffffffffffffffffffffffffffff1663f465c77e858e8e602001518e6040518563ffffffff1660e01b815260040161675593929190619f8c565b60006040518083038160008887f19350505050801561679757506040513d6000823e3d601f19601f82011682018060405250810190616794919061a260565b60015b616887576167a3619432565b806308c379a00361683457506167b7619454565b806167c25750616836565b6167d667c38841f5bb426dc460c01b613b0b565b8d816040516020016167e8919061a2e2565b6040516020818303038152906040526040517f220266b600000000000000000000000000000000000000000000000000000000815260040161682b9291906195b0565b60405180910390fd5b505b61684a67931a78f9e11717bb60c01b613b0b565b8c6040517f220266b600000000000000000000000000000000000000000000000000000000815260040161687e919061a354565b60405180910390fd5b61689b67d768037340671b7260c01b613b0b565b8199506168b267b051c398d37aeff560c01b613b0b565b80985050505050505050509550959350505050565b60006168dd6707014686f499504560c01b613b0b565b6168f16796709f10a759b60c60c01b613b0b565b819050919050565b600080616910674a13673f083cae7d60c01b613b0b565b616924674b63ab113bc3c6f460c01b613b0b565b616938672ffe021986d2217f60c01b613b0b565b600083036169885761695467d14111b5c0dc71b060c01b613b0b565b61696867717cc1608b786d6060c01b613b0b565b61697c676bcd67da856e0d2b60c01b613b0b565b60008091509150616a29565b61699c6728b87be4bd233a0860c01b613b0b565b6169b0675f83ae33b5d720b960c01b613b0b565b6169c467afa51eaba4ada43360c01b613b0b565b60006169cf84616ac6565b90506169e5677f2983a6aeb6e19c60c01b613b0b565b806040015165ffffffffffff16421180616a0a5750806020015165ffffffffffff1642105b9150616a2067c7bf9050789fae5e60c01b613b0b565b80600001519250505b915091565b50565b6060616a47670dec2dbb958a50d860c01b616a2e565b616a5b67f7ebcbf78dfbd2e760c01b616a2e565b616a6f67cf9d9e801922f74560c01b616a2e565b36600083806101400190616a839190618644565b91509150616a9b670c9fe5e21e8be86a60c01b616a2e565b8360208184030360405194506020810185016040528085528082602087013750505050919050565b50565b616ace617327565b616ae267445255dfc48f0c1160c01b616ac3565b616af667910e9ceb2fd1ddda60c01b616ac3565b616b0a678110ad95ab238bef60c01b616ac3565b6000829050616b2367c37597af64d819b260c01b616ac3565b616b3767745df2de1e3ff8c060c01b616ac3565b600060a084901c9050616b54675f3ae0fbd8e35c5660c01b616ac3565b616b68679197384898b1248760c01b616ac3565b60008165ffffffffffff1603616bae57616b8c676ec2d105430e80aa60c01b616ac3565b616ba0673b4825f59f411ff360c01b616ac3565b65ffffffffffff9050616bc3565b616bc267d11e3810d26f91af60c01b616ac3565b5b616bd767b9e858fecf1822cf60c01b616ac3565b616beb67d84bfe2ecd699a3c60c01b616ac3565b600060d085901c9050616c0867bf26ab64782cc21560c01b616ac3565b616c1c6716b05318dd950b3260c01b616ac3565b60405180606001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018265ffffffffffff1681526020018365ffffffffffff168152509350505050919050565b6000616c7d6722175c0f9d46245a60c01b613b0b565b616c9167751619bcb02f97fd60c01b613b0b565b616ca567a2f19de15cde753c60c01b613b0b565b8183108015616cc45750616cc3677ff3f31aa240539460c01b6156e2565b5b80616cdf5750616cde67a156eae91ca1679a60c01b6156ed565b5b616ce95781616ceb565b825b905092915050565b616d076714b81b82e0d404e260c01b613b0b565b616d1b67ad5b2c067f5370fa60c01b613b0b565b616d2f67cb8395f833ee94b360c01b613b0b565b6000828290501461725b57616d4e673d934ef1a627c4d660c01b613b0b565b616d6267b1c545fef9fce3e760c01b613b0b565b616d7667ee209361e09d4b3060c01b613b0b565b60008360000151600001519050616d9767e453fe3e3c27ec0960c01b613b0b565b616dab67b335d211cfd6199a60c01b613b0b565b60008173ffffffffffffffffffffffffffffffffffffffff163b14616e2f57616dde67d17238321e17c45860c01b613b0b565b616df2675da8a164ebc30e0260c01b613b0b565b846040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616e26919061a3ce565b60405180910390fd5b616e43673be16346b366dcea60c01b613b0b565b616e5767d1050ad5ac855c1060c01b613b0b565b616e6b67516cdd3b5eb6451f60c01b613b0b565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516060015186866040518463ffffffff1660e01b8152600401616ed1929190618cbd565b60206040518083038160008887f1158015616ef0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190616f159190618cf6565b9050616f2b679ddc0b7480cf28f060c01b613b0b565b616f3f67fc851e2e35e3d69c60c01b613b0b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603616fd857616f87671705c928229b781960c01b613b0b565b616f9b6742acc096bd718a9060c01b613b0b565b856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401616fcf919061a448565b60405180910390fd5b616fec67ee2c1185c379a99b60c01b613b0b565b617000677b2608bd6112326460c01b613b0b565b6170146727a18a42769c8c7660c01b613b0b565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146170ac5761705b67fd1907cc849a07c260c01b613b0b565b61706f673adcce53dd1d53dc60c01b613b0b565b856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016170a3919061a4c2565b60405180910390fd5b6170c0679cbade85ccd08c4860c01b613b0b565b6170d467613cfc3cdff81b5c60c01b613b0b565b6170e867a824c7345ac3349d60c01b613b0b565b60008173ffffffffffffffffffffffffffffffffffffffff163b0361716c5761711b672c8b8acf7bac64f660c01b613b0b565b61712f676f72c43fa57e965a60c01b613b0b565b856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401617163919061a53c565b60405180910390fd5b61718067b6e6772723fa2a5660c01b613b0b565b6171946734b6cd6bbc43764260c01b613b0b565b6171a86725edc697080da99960c01b613b0b565b600084846000906014926171be93929190618b30565b906171c99190618baf565b60601c90506171e2671ddd5ee48b1a7f4660c01b613b0b565b6171f667f1990a72ac6f6e5660c01b613b0b565b8273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160a0015160405161724b92919061a56a565b60405180910390a3505050617270565b61726f678620bc314972512460c01b613b0b565b5b50505050565b6040518060a0016040528061728961736e565b8152602001600080191681526020016000815260200160008152602001600081525090565b6040518060a0016040528060006dffffffffffffffffffffffffffff16815260200160001515815260200160006dffffffffffffffffffffffffffff168152602001600063ffffffff168152602001600065ffffffffffff1681525090565b604051806040016040528060008152602001600081525090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff1681525090565b604051806101000160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b600063ffffffff82169050919050565b61740c816173f3565b811461741757600080fd5b50565b60008135905061742981617403565b92915050565b600060208284031215617445576174446173e9565b5b60006174538482850161741a565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6174af82617466565b810181811067ffffffffffffffff821117156174ce576174cd617477565b5b80604052505050565b60006174e16173df565b90506174ed82826174a6565b919050565b600067ffffffffffffffff82111561750d5761750c617477565b5b61751682617466565b9050602081019050919050565b82818337600083830152505050565b6000617545617540846174f2565b6174d7565b90508281526020810184848401111561756157617560617461565b5b61756c848285617523565b509392505050565b600082601f8301126175895761758861745c565b5b8135617599848260208601617532565b91505092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006175d2826175a7565b9050919050565b6175e2816175c7565b81146175ed57600080fd5b50565b6000813590506175ff816175d9565b92915050565b6000819050919050565b61761881617605565b811461762357600080fd5b50565b6000813590506176358161760f565b92915050565b60006101008284031215617652576176516175a2565b5b61765d6101006174d7565b9050600061766d848285016175f0565b600083015250602061768184828501617626565b602083015250604061769584828501617626565b60408301525060606176a984828501617626565b60608301525060806176bd84828501617626565b60808301525060a06176d1848285016175f0565b60a08301525060c06176e584828501617626565b60c08301525060e06176f984828501617626565b60e08301525092915050565b6000819050919050565b61771881617705565b811461772357600080fd5b50565b6000813590506177358161770f565b92915050565b60006101808284031215617752576177516175a2565b5b61775c60a06174d7565b9050600061776c8482850161763b565b60008301525061010061778184828501617726565b60208301525061012061779684828501617626565b6040830152506101406177ab84828501617626565b6060830152506101606177c084828501617626565b60808301525092915050565b600080fd5b600080fd5b60008083601f8401126177ec576177eb61745c565b5b8235905067ffffffffffffffff811115617809576178086177cc565b5b602083019150836001820283011115617825576178246177d1565b5b9250929050565b6000806000806101c08587031215617847576178466173e9565b5b600085013567ffffffffffffffff811115617865576178646173ee565b5b61787187828801617574565b94505060206178828782880161773b565b9350506101a085013567ffffffffffffffff8111156178a4576178a36173ee565b5b6178b0878288016177d6565b925092505092959194509250565b6178c781617605565b82525050565b60006020820190506178e260008301846178be565b92915050565b60008083601f8401126178fe576178fd61745c565b5b8235905067ffffffffffffffff81111561791b5761791a6177cc565b5b602083019150836020820283011115617937576179366177d1565b5b9250929050565b6000617949826175a7565b9050919050565b6179598161793e565b811461796457600080fd5b50565b60008135905061797681617950565b92915050565b600080600060408486031215617995576179946173e9565b5b600084013567ffffffffffffffff8111156179b3576179b26173ee565b5b6179bf868287016178e8565b935093505060206179d286828701617967565b9150509250925092565b600080604083850312156179f3576179f26173e9565b5b6000617a0185828601617967565b9250506020617a1285828601617626565b9150509250929050565b60008083601f840112617a3257617a3161745c565b5b8235905067ffffffffffffffff811115617a4f57617a4e6177cc565b5b602083019150836020820283011115617a6b57617a6a6177d1565b5b9250929050565b600080600060408486031215617a8b57617a8a6173e9565b5b600084013567ffffffffffffffff811115617aa957617aa86173ee565b5b617ab586828701617a1c565b93509350506020617ac886828701617967565b9150509250925092565b600060208284031215617ae857617ae76173e9565b5b6000617af6848285016175f0565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b617b2281617aff565b82525050565b60008115159050919050565b617b3d81617b28565b82525050565b617b4c816173f3565b82525050565b600065ffffffffffff82169050919050565b617b6d81617b52565b82525050565b60a082016000820151617b896000850182617b19565b506020820151617b9c6020850182617b34565b506040820151617baf6040850182617b19565b506060820151617bc26060850182617b43565b506080820151617bd56080850182617b64565b50505050565b600060a082019050617bf06000830184617b73565b92915050565b600080600080600060608688031215617c1257617c116173e9565b5b600086013567ffffffffffffffff811115617c3057617c2f6173ee565b5b617c3c888289016177d6565b95509550506020617c4f888289016175f0565b935050604086013567ffffffffffffffff811115617c7057617c6f6173ee565b5b617c7c888289016177d6565b92509250509295509295909350565b60008060208385031215617ca257617ca16173e9565b5b600083013567ffffffffffffffff811115617cc057617cbf6173ee565b5b617ccc858286016177d6565b92509250509250929050565b600080fd5b60006101608284031215617cf457617cf3617cd8565b5b81905092915050565b600060208284031215617d1357617d126173e9565b5b600082013567ffffffffffffffff811115617d3157617d306173ee565b5b617d3d84828501617cdd565b91505092915050565b617d4f81617705565b82525050565b6000602082019050617d6a6000830184617d46565b92915050565b600060208284031215617d8657617d856173e9565b5b6000617d9484828501617967565b91505092915050565b60008060008060608587031215617db757617db66173e9565b5b600085013567ffffffffffffffff811115617dd557617dd46173ee565b5b617de187828801617cdd565b9450506020617df2878288016175f0565b935050604085013567ffffffffffffffff811115617e1357617e126173ee565b5b617e1f878288016177d6565b925092505092959194509250565b617e3681617aff565b82525050565b617e4581617b28565b82525050565b617e54816173f3565b82525050565b617e6381617b52565b82525050565b600060a082019050617e7e6000830188617e2d565b617e8b6020830187617e3c565b617e986040830186617e2d565b617ea56060830185617e4b565b617eb26080830184617e5a565b9695505050505050565b6000819050919050565b6000617ee1617edc617ed784617aff565b617ebc565b617605565b9050919050565b617ef181617ec6565b82525050565b6000602082019050617f0c6000830184617ee8565b92915050565b600082825260208201905092915050565b7f6d757374207370656369667920756e7374616b652064656c6179000000000000600082015250565b6000617f59601a83617f12565b9150617f6482617f23565b602082019050919050565b60006020820190508181036000830152617f8881617f4c565b9050919050565b7f63616e6e6f7420646563726561736520756e7374616b652074696d6500000000600082015250565b6000617fc5601c83617f12565b9150617fd082617f8f565b602082019050919050565b60006020820190508181036000830152617ff481617fb8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061803582617605565b915061804083617605565b925082820190508082111561805857618057617ffb565b5b92915050565b7f6e6f207374616b65207370656369666965640000000000000000000000000000600082015250565b6000618094601283617f12565b915061809f8261805e565b602082019050919050565b600060208201905081810360008301526180c381618087565b9050919050565b7f7374616b65206f766572666c6f77000000000000000000000000000000000000600082015250565b6000618100600e83617f12565b915061810b826180ca565b602082019050919050565b6000602082019050818103600083015261812f816180f3565b9050919050565b600061815161814c618147846173f3565b617ebc565b617605565b9050919050565b61816181618136565b82525050565b600060408201905061817c60008301856178be565b6181896020830184618158565b9392505050565b7f4141393220696e7465726e616c2063616c6c206f6e6c79000000000000000000600082015250565b60006181c6601783617f12565b91506181d182618190565b602082019050919050565b600060208201905081810360008301526181f5816181b9565b9050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561823657808201518184015260208101905061821b565b60008484015250505050565b600061824d826181fc565b6182578185618207565b9350618267818560208601618218565b61827081617466565b840191505092915050565b600060408201905061829060008301856178be565b81810360208301526182a28184618242565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b60008235600161016003833603038112618306576183056182da565b5b80830191505092915050565b7f576974686472617720616d6f756e7420746f6f206c6172676500000000000000600082015250565b6000618348601983617f12565b915061835382618312565b602082019050919050565b600060208201905081810360008301526183778161833b565b9050919050565b600061838982617605565b915061839483617605565b92508282039050818111156183ac576183ab617ffb565b5b92915050565b60006183cd6183c86183c3846175a7565b617ebc565b6175a7565b9050919050565b60006183df826183b2565b9050919050565b60006183f1826183d4565b9050919050565b618401816183e6565b82525050565b600060408201905061841c60008301856183f8565b61842960208301846178be565b9392505050565b600081905092915050565b50565b600061844b600083618430565b91506184568261843b565b600082019050919050565b600061846c8261843e565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006184ac601283617f12565b91506184b782618476565b602082019050919050565b600060208201905081810360008301526184db8161849f565b9050919050565b6000823560016060038336030381126184fe576184fd6182da565b5b80830191505092915050565b60008083356001602003843603038112618527576185266182da565b5b80840192508235915067ffffffffffffffff821115618549576185486182df565b5b602083019250602082023603831315618565576185646182e4565b5b509250929050565b6000618578826175c7565b9050919050565b6185888161856d565b811461859357600080fd5b50565b6000813590506185a58161857f565b92915050565b6000602082840312156185c1576185c06173e9565b5b60006185cf84828501618596565b91505092915050565b7f4141393620696e76616c69642061676772656761746f72000000000000000000600082015250565b600061860e601783617f12565b9150618619826185d8565b602082019050919050565b6000602082019050818103600083015261863d81618601565b9050919050565b60008083356001602003843603038112618661576186606182da565b5b80840192508235915067ffffffffffffffff821115618683576186826182df565b5b60208301925060018202360383131561869f5761869e6182e4565b5b509250929050565b600082825260208201905092915050565b6000819050919050565b60006186d160208401846175f0565b905092915050565b6186e2816175c7565b82525050565b60006186f76020840184617626565b905092915050565b61870881617605565b82525050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261873a57618739618718565b5b83810192508235915060208301925067ffffffffffffffff8211156187625761876161870e565b5b60018202360383131561877857618777618713565b5b509250929050565b600082825260208201905092915050565b600061879d8385618780565b93506187aa838584617523565b6187b383617466565b840190509392505050565b600061016083016187d260008401846186c2565b6187df60008601826186d9565b506187ed60208401846186e8565b6187fa60208601826186ff565b50618808604084018461871d565b858303604087015261881b838284618791565b9250505061882c606084018461871d565b858303606087015261883f838284618791565b9250505061885060808401846186e8565b61885d60808601826186ff565b5061886b60a08401846186e8565b61887860a08601826186ff565b5061888660c08401846186e8565b61889360c08601826186ff565b506188a160e08401846186e8565b6188ae60e08601826186ff565b506188bd6101008401846186e8565b6188cb6101008601826186ff565b506188da61012084018461871d565b8583036101208701526188ee838284618791565b9250505061890061014084018461871d565b858303610140870152618914838284618791565b925050508091505092915050565b600061892e83836187be565b905092915050565b6000823560016101600383360303811261895357618952618718565b5b82810191505092915050565b6000602082019050919050565b600061897883856186a7565b93508360208402850161898a846186b8565b8060005b878110156189ce5784840389526189a58284618936565b6189af8582618922565b94506189ba8361895f565b925060208a0199505060018101905061898e565b50829750879450505050509392505050565b60006189ec8385618207565b93506189f9838584617523565b618a0283617466565b840190509392505050565b60006040820190508181036000830152618a2881868861896c565b90508181036020830152618a3d8184866189e0565b905095945050505050565b618a51816175c7565b82525050565b6000602082019050618a6c6000830184618a48565b92915050565b6000618a7d82617605565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203618aaf57618aae617ffb565b5b600182019050919050565b7f41413230206163636f756e74206e6f74206465706c6f79656400000000000000600082015250565b6000618af0601983617f12565b9150618afb82618aba565b602082019050919050565b60006020820190508181036000830152618b1f81618ae3565b9050919050565b600080fd5b600080fd5b60008085851115618b4457618b43618b26565b5b83861115618b5557618b54618b2b565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b6000618bbb8383618b6b565b82618bc68135618b76565b92506014821015618c0657618c017fffffffffffffffffffffffffffffffffffffffff00000000000000000000000083601403600802618ba2565b831692505b505092915050565b7f41413330207061796d6173746572206e6f74206465706c6f7965640000000000600082015250565b6000618c44601b83617f12565b9150618c4f82618c0e565b602082019050919050565b60006020820190508181036000830152618c7381618c37565b9050919050565b6000618c87600083617f12565b9150618c928261843b565b600082019050919050565b60006020820190508181036000830152618cb681618c7a565b9050919050565b60006020820190508181036000830152618cd88184866189e0565b90509392505050565b600081519050618cf0816175d9565b92915050565b600060208284031215618d0c57618d0b6173e9565b5b6000618d1a84828501618ce1565b91505092915050565b6000606082019050618d386000830186617d46565b618d456020830185618a48565b618d5260408301846178be565b949350505050565b7f6e6f74207374616b656400000000000000000000000000000000000000000000600082015250565b6000618d90600a83617f12565b9150618d9b82618d5a565b602082019050919050565b60006020820190508181036000830152618dbf81618d83565b9050919050565b7f616c726561647920756e7374616b696e67000000000000000000000000000000600082015250565b6000618dfc601183617f12565b9150618e0782618dc6565b602082019050919050565b60006020820190508181036000830152618e2b81618def565b9050919050565b6000618e3d82617b52565b9150618e4883617b52565b9250828201905065ffffffffffff811115618e6657618e65617ffb565b5b92915050565b6000618e87618e82618e7d84617b52565b617ebc565b617605565b9050919050565b618e9781618e6c565b82525050565b6000602082019050618eb26000830184618e8e565b92915050565b7f4e6f207374616b6520746f207769746864726177000000000000000000000000600082015250565b6000618eee601483617f12565b9150618ef982618eb8565b602082019050919050565b60006020820190508181036000830152618f1d81618ee1565b9050919050565b7f6d7573742063616c6c20756e6c6f636b5374616b652829206669727374000000600082015250565b6000618f5a601d83617f12565b9150618f6582618f24565b602082019050919050565b60006020820190508181036000830152618f8981618f4d565b9050919050565b7f5374616b65207769746864726177616c206973206e6f74206475650000000000600082015250565b6000618fc6601b83617f12565b9150618fd182618f90565b602082019050919050565b60006020820190508181036000830152618ff581618fb9565b9050919050565b7f6661696c656420746f207769746864726177207374616b650000000000000000600082015250565b6000619032601883617f12565b915061903d82618ffc565b602082019050919050565b6000602082019050818103600083015261906181619025565b9050919050565b60006190748385618430565b9350619081838584617523565b82840190509392505050565b600061909a828486619068565b91508190509392505050565b600060c0820190506190bb60008301896178be565b6190c860208301886178be565b6190d56040830187617e5a565b6190e26060830186617e5a565b6190ef6080830185617e3c565b81810360a08301526191018184618242565b9050979650505050505050565b6000619119826181fc565b6191238185618780565b9350619133818560208601618218565b61913c81617466565b840191505092915050565b600060c08301600083015161915f60008601826186ff565b50602083015161917260208601826186ff565b5060408301516191856040860182617b34565b5060608301516191986060860182617b64565b5060808301516191ab6080860182617b64565b5060a083015184820360a08601526191c3828261910e565b9150508091505092915050565b6040820160008201516191e660008501826186ff565b5060208201516191f960208501826186ff565b50505050565b60408201600082015161921560008501826186ff565b50602082015161922860208501826186ff565b50505050565b60608201600082015161924460008501826186d9565b50602082015161925760208501826191ff565b50505050565b60006101408201905081810360008301526192788188619147565b905061928760208301876191d0565b61929460608301866191d0565b6192a160a08301856191d0565b6192ae60e083018461922e565b9695505050505050565b600060e08201905081810360008301526192d28187619147565b90506192e160208301866191d0565b6192ee60608301856191d0565b6192fb60a08301846191d0565b95945050505050565b7f6465706f736974206f766572666c6f7700000000000000000000000000000000600082015250565b600061933a601083617f12565b915061934582619304565b602082019050919050565b600060208201905081810360008301526193698161932d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106193b0576193af619370565b5b50565b60008190506193c18261939f565b919050565b60006193d1826193b3565b9050919050565b6193e1816193c6565b82525050565b60006060820190506193fc60008301866193d8565b818103602083015261940e8185618242565b905061941d60408301846178be565b949350505050565b60008160e01c9050919050565b600060033d11156194515760046000803e61944e600051619425565b90505b90565b600060443d106194e1576194666173df565b60043d036004823e80513d602482011167ffffffffffffffff8211171561948e5750506194e1565b808201805167ffffffffffffffff8111156194ac57505050506194e1565b80602083010160043d0385018111156194c95750505050506194e1565b6194d8826020018501866174a6565b82955050505050505b90565b7f4141353020706f73744f702072657665727465643a2000000000000000000000815250565b600081519050919050565b600081905092915050565b600061952b8261950a565b6195358185619515565b9350619545818560208601618218565b80840191505092915050565b600061955c826194e4565b60168201915061956c8284619520565b915081905092915050565b60006195828261950a565b61958c8185617f12565b935061959c818560208601618218565b6195a581617466565b840191505092915050565b60006040820190506195c560008301856178be565b81810360208301526195d78184619577565b90509392505050565b7f4141353020706f73744f70207265766572740000000000000000000000000000600082015250565b6000619616601283617f12565b9150619621826195e0565b602082019050919050565b600060408201905061964160008301846178be565b818103602083015261965281619609565b905092915050565b7f414135312070726566756e642062656c6f772061637475616c476173436f7374600082015250565b6000619690602083617f12565b915061969b8261965a565b602082019050919050565b60006040820190506196bb60008301846178be565b81810360208301526196cc81619683565b905092915050565b60006080820190506196e960008301876178be565b6196f66020830186617e3c565b61970360408301856178be565b61971060608301846178be565b95945050505050565b7f41413934206761732076616c756573206f766572666c6f770000000000000000600082015250565b600061974f601883617f12565b915061975a82619719565b602082019050919050565b6000602082019050818103600083015261977e81619742565b9050919050565b7f41413430206f76657220766572696669636174696f6e4761734c696d69740000600082015250565b60006197bb601e83617f12565b91506197c682619785565b602082019050919050565b60006040820190506197e660008301846178be565b81810360208301526197f7816197ae565b905092915050565b7f41413234207369676e6174757265206572726f72000000000000000000000000600082015250565b6000619835601483617f12565b9150619840826197ff565b602082019050919050565b600060408201905061986060008301846178be565b818103602083015261987181619828565b905092915050565b7f414132322065787069726564206f72206e6f7420647565000000000000000000600082015250565b60006198af601783617f12565b91506198ba82619879565b602082019050919050565b60006040820190506198da60008301846178be565b81810360208301526198eb816198a2565b905092915050565b7f41413334207369676e6174757265206572726f72000000000000000000000000600082015250565b6000619929601483617f12565b9150619934826198f3565b602082019050919050565b600060408201905061995460008301846178be565b81810360208301526199658161991c565b905092915050565b7f41413332207061796d61737465722065787069726564206f72206e6f7420647560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006199c9602183617f12565b91506199d48261996d565b604082019050919050565b60006040820190506199f460008301846178be565b8181036020830152619a05816199bc565b905092915050565b61010082016000820151619a2460008501826186d9565b506020820151619a3760208501826186ff565b506040820151619a4a60408501826186ff565b506060820151619a5d60608501826186ff565b506080820151619a7060808501826186ff565b5060a0820151619a8360a08501826186d9565b5060c0820151619a9660c08501826186ff565b5060e0820151619aa960e08501826186ff565b50505050565b619ab881617705565b82525050565b61018082016000820151619ad56000850182619a0d565b506020820151619ae9610100850182619aaf565b506040820151619afd6101208501826186ff565b506060820151619b116101408501826186ff565b506080820151619b256101608501826186ff565b50505050565b60006101c0820190508181036000830152619b478186886189e0565b9050619b566020830185619abe565b8181036101a0830152619b698184618242565b905095945050505050565b600081519050619b838161760f565b92915050565b600060208284031215619b9f57619b9e6173e9565b5b6000619bad84828501619b74565b91505092915050565b7f41413935206f7574206f66206761730000000000000000000000000000000000600082015250565b6000619bec600f83617f12565b9150619bf782619bb6565b602082019050919050565b6000604082019050619c1760008301846178be565b8181036020830152619c2881619bdf565b905092915050565b7f4141393020696e76616c69642062656e65666963696172790000000000000000600082015250565b6000619c66601883617f12565b9150619c7182619c30565b602082019050919050565b60006020820190508181036000830152619c9581619c59565b9050919050565b7f41413931206661696c65642073656e6420746f2062656e656669636961727900600082015250565b6000619cd2601f83617f12565b9150619cdd82619c9c565b602082019050919050565b60006020820190508181036000830152619d0181619cc5565b9050919050565b60006060820190508181036000830152619d238187896189e0565b9050619d326020830186618a48565b8181036040830152619d458184866189e0565b90509695505050505050565b6000819050919050565b6000619d76619d71619d6c84619d51565b617ebc565b617605565b9050919050565b619d8681619d5b565b82525050565b6000604082019050619da16000830185619d7d565b8181036020830152619db38184619577565b90509392505050565b7f4141393320696e76616c6964207061796d6173746572416e6444617461000000600082015250565b6000619df2601d83617f12565b9150619dfd82619dbc565b602082019050919050565b60006020820190508181036000830152619e2181619de5565b9050919050565b60006101608301619e3c60008401846186c2565b619e4960008601826186d9565b50619e5760208401846186e8565b619e6460208601826186ff565b50619e72604084018461871d565b8583036040870152619e85838284618791565b92505050619e96606084018461871d565b8583036060870152619ea9838284618791565b92505050619eba60808401846186e8565b619ec760808601826186ff565b50619ed560a08401846186e8565b619ee260a08601826186ff565b50619ef060c08401846186e8565b619efd60c08601826186ff565b50619f0b60e08401846186e8565b619f1860e08601826186ff565b50619f276101008401846186e8565b619f356101008601826186ff565b50619f4461012084018461871d565b858303610120870152619f58838284618791565b92505050619f6a61014084018461871d565b858303610140870152619f7e838284618791565b925050508091505092915050565b60006060820190508181036000830152619fa68186619e28565b9050619fb56020830185617d46565b619fc260408301846178be565b949350505050565b7f414132332072657665727465643a200000000000000000000000000000000000815250565b6000619ffb82619fca565b600f8201915061a00b8284619520565b915081905092915050565b7f4141323320726576657274656420286f72204f4f472900000000000000000000600082015250565b600061a04c601683617f12565b915061a0578261a016565b602082019050919050565b600060408201905061a07760008301846178be565b818103602083015261a0888161a03f565b905092915050565b7f41413231206469646e2774207061792070726566756e64000000000000000000600082015250565b600061a0c6601783617f12565b915061a0d18261a090565b602082019050919050565b600060408201905061a0f160008301846178be565b818103602083015261a1028161a0b9565b905092915050565b7f4141343120746f6f206c6974746c6520766572696669636174696f6e47617300600082015250565b600061a140601f83617f12565b915061a14b8261a10a565b602082019050919050565b6000602082019050818103600083015261a16f8161a133565b9050919050565b7f41413331207061796d6173746572206465706f73697420746f6f206c6f770000600082015250565b600061a1ac601e83617f12565b915061a1b78261a176565b602082019050919050565b600060408201905061a1d760008301846178be565b818103602083015261a1e88161a19f565b905092915050565b600061a20361a1fe846174f2565b6174d7565b90508281526020810184848401111561a21f5761a21e617461565b5b61a22a848285618218565b509392505050565b600082601f83011261a2475761a24661745c565b5b815161a25784826020860161a1f0565b91505092915050565b6000806040838503121561a2775761a2766173e9565b5b600083015167ffffffffffffffff81111561a2955761a2946173ee565b5b61a2a18582860161a232565b925050602061a2b285828601619b74565b9150509250929050565b7f414133332072657665727465643a200000000000000000000000000000000000815250565b600061a2ed8261a2bc565b600f8201915061a2fd8284619520565b915081905092915050565b7f4141333320726576657274656420286f72204f4f472900000000000000000000600082015250565b600061a33e601683617f12565b915061a3498261a308565b602082019050919050565b600060408201905061a36960008301846178be565b818103602083015261a37a8161a331565b905092915050565b7f414131302073656e64657220616c726561647920636f6e737472756374656400600082015250565b600061a3b8601f83617f12565b915061a3c38261a382565b602082019050919050565b600060408201905061a3e360008301846178be565b818103602083015261a3f48161a3ab565b905092915050565b7f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000600082015250565b600061a432601b83617f12565b915061a43d8261a3fc565b602082019050919050565b600060408201905061a45d60008301846178be565b818103602083015261a46e8161a425565b905092915050565b7f4141313420696e6974436f6465206d7573742072657475726e2073656e646572600082015250565b600061a4ac602083617f12565b915061a4b78261a476565b602082019050919050565b600060408201905061a4d760008301846178be565b818103602083015261a4e88161a49f565b905092915050565b7f4141313520696e6974436f6465206d757374206372656174652073656e646572600082015250565b600061a526602083617f12565b915061a5318261a4f0565b602082019050919050565b600060408201905061a55160008301846178be565b818103602083015261a5628161a519565b905092915050565b600060408201905061a57f6000830185618a48565b61a58c6020830184618a48565b939250505056fea26469706673582212206dae6a3dfee854481a79e705a7b23d488634e9bc0aefbf869b89869d4b5e7b1364736f6c63430008110033608060405234801561001057600080fd5b5061044f806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004a60048036038101906100459190610288565b610060565b6040516100579190610316565b60405180910390f35b600061007667a77071926199a6bc60c01b610216565b61008a6705db437c17f4c53160c01b610216565b61009e67f7e34fe0ef67d65660c01b610216565b600083836000906014926100b49392919061033b565b906100bf91906103ba565b60601c90506100d8679eee7b10c69e371260c01b610216565b6100ec67e915e597d60e618060c01b610216565b6000848460149080926101019392919061033b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050905061015a6759fca45833adea5d60c01b610216565b61016e67d2f649902cd0246260c01b610216565b600061018467957e43ea595585a160c01b610216565b602060008351602085016000875af1905060005193506101ae67a96890a92414c3b460c01b610216565b6101c267936c0d2a6e83afc460c01b610216565b806101f8576101db67cf211eb43cb304cc60c01b610216565b6101ef67f8af295b41c5669760c01b610216565b6000935061020d565b61020c67bedaa80464ace1ed60c01b610216565b5b50505092915050565b50565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261024857610247610223565b5b8235905067ffffffffffffffff81111561026557610264610228565b5b6020830191508360018202830111156102815761028061022d565b5b9250929050565b6000806020838503121561029f5761029e610219565b5b600083013567ffffffffffffffff8111156102bd576102bc61021e565b5b6102c985828601610232565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610300826102d5565b9050919050565b610310816102f5565b82525050565b600060208201905061032b6000830184610307565b92915050565b600080fd5b600080fd5b6000808585111561034f5761034e610331565b5b838611156103605761035f610336565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b600082821b905092915050565b60006103c68383610376565b826103d18135610381565b925060148210156104115761040c7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008026103ad565b831692505b50509291505056fea2646970667358221220222219afa35e7a9ea15a12342931ab42e032fb2f8ffc39aeda6c656ef722d50964736f6c63430008110033"
Const bufferPercent
bufferPercent: 13 = 13
Const debug
debug: any = Debug('aa.rpc')
Const entryPointAbi
entryPointAbi: any = EntryPoint__factory.abi
Const onRampApiKey
onRampApiKey: "pk_prod_01H66WYDRFM95JBTJ4VMGY1FAX" = "pk_prod_01H66WYDRFM95JBTJ4VMGY1FAX"
Const onRamperAllNetworks
onRamperAllNetworks: string[] = ['OPTIMISM', 'POLYGON', 'ARBITRUM', 'FUSE', 'GNOSIS', 'ETHEREUM']
Const validateUserOpMethod
validateUserOpMethod: "simulateValidation" = "simulateValidation"
Const window
window: Window & { ethereum: { autoRefreshOnNetworkChange: boolean; isMetaMask: boolean; networkVersion: string; selectedAddress: string; enable: any; on: any; request: any } }
calculate the preVerificationGas of the given UserOperation preVerificationGas (by definition) is the cost overhead that can't be calculated on-chain. it is based on parameters that are defined by the Ethereum protocol for external transactions.