[ { "inputs": [ { "internalType": "address", "name": "_layerZeroEndpoint", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "_reason", "type": "bytes" } ], "name": "MessageFailed", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MintingDisabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "ReceiveFromChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "_payloadHash", "type": "bytes32" } ], "name": "RetryMessageSuccess", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": false, "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "SendToChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "_type", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_minDstGas", "type": "uint256" } ], "name": "SetMinDstGas", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isMinter", "type": "bool" } ], "name": "SetMinter", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "precrime", "type": "address" } ], "name": "SetPrecrime", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "SetTrustedRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "SetTrustedRemoteAddress", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "_useCustomAdapterParams", "type": "bool" } ], "name": "SetUseCustomAdapterParams", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_PAYLOAD_SIZE_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "NO_EXTRA_GAS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PT_SEND", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "circulatingSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "disableMinting", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bool", "name": "_useZro", "type": "bool" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "estimateSendFee", "outputs": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "zroFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "failedMessages", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "forceResumeReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" } ], "name": "getConfig", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" } ], "name": "getTrustedRemoteAddress", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "isTrustedRemote", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lzEndpoint", "outputs": [ { "internalType": "contract ILayerZeroEndpoint", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "lzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "minDstGasLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "minters", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintingEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "nonblockingLzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "payloadSizeLimitLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "precrime", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "retryMessage", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address payable", "name": "_refundAddress", "type": "address" }, { "internalType": "address", "name": "_zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "sendFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" }, { "internalType": "bytes", "name": "_config", "type": "bytes" } ], "name": "setConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint16", "name": "_packetType", "type": "uint16" }, { "internalType": "uint256", "name": "_minGas", "type": "uint256" } ], "name": "setMinDstGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_minter", "type": "address" }, { "internalType": "bool", "name": "_isMinter", "type": "bool" } ], "name": "setMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_size", "type": "uint256" } ], "name": "setPayloadSizeLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_precrime", "type": "address" } ], "name": "setPrecrime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setReceiveVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setSendVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "setTrustedRemote", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "setTrustedRemoteAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_useCustomAdapterParams", "type": "bool" } ], "name": "setUseCustomAdapterParams", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "trustedRemoteLookup", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "useCustomAdapterParams", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
60a06040526001600d60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051620066b1380380620066b18339818101604052810190620000529190620003a7565b81818482828280806200007a6200006e620000e360201b60201c565b620000eb60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050505081600a9081620000c291906200068c565b5080600b9081620000d491906200068c565b50505050505050505062000773565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001f082620001c3565b9050919050565b6200020281620001e3565b81146200020e57600080fd5b50565b6000815190506200022281620001f7565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200027d8262000232565b810181811067ffffffffffffffff821117156200029f576200029e62000243565b5b80604052505050565b6000620002b4620001af565b9050620002c2828262000272565b919050565b600067ffffffffffffffff821115620002e557620002e462000243565b5b620002f08262000232565b9050602081019050919050565b60005b838110156200031d57808201518184015260208101905062000300565b60008484015250505050565b6000620003406200033a84620002c7565b620002a8565b9050828152602081018484840111156200035f576200035e6200022d565b5b6200036c848285620002fd565b509392505050565b600082601f8301126200038c576200038b62000228565b5b81516200039e84826020860162000329565b91505092915050565b600080600060608486031215620003c357620003c2620001b9565b5b6000620003d38682870162000211565b935050602084015167ffffffffffffffff811115620003f757620003f6620001be565b5b620004058682870162000374565b925050604084015167ffffffffffffffff811115620004295762000428620001be565b5b620004378682870162000374565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200049457607f821691505b602082108103620004aa57620004a96200044c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004d5565b620005208683620004d5565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200056d62000567620005618462000538565b62000542565b62000538565b9050919050565b6000819050919050565b62000589836200054c565b620005a1620005988262000574565b848454620004e2565b825550505050565b600090565b620005b8620005a9565b620005c58184846200057e565b505050565b5b81811015620005ed57620005e1600082620005ae565b600181019050620005cb565b5050565b601f8211156200063c576200060681620004b0565b6200061184620004c5565b8101602085101562000621578190505b620006396200063085620004c5565b830182620005ca565b50505b505050565b600082821c905092915050565b6000620006616000198460080262000641565b1980831691505092915050565b60006200067c83836200064e565b9150826002028217905092915050565b620006978262000441565b67ffffffffffffffff811115620006b357620006b262000243565b5b620006bf82546200047b565b620006cc828285620005f1565b600060209050601f831160018114620007045760008415620006ef578287015190505b620006fb85826200066e565b8655506200076b565b601f1984166200071486620004b0565b60005b828110156200073e5784890151825560018201915060208501945060208101905062000717565b868310156200075e57848901516200075a601f8916826200064e565b8355505b6001600288020188555050505b505050505050565b608051615eea620007c760003960008181610c4801528181610ffa015281816110df015281816111d3015281816114b101528181611c0701528181611cbc0152818161231c01526134180152615eea6000f3fe6080604052600436106102e35760003560e01c80637e5cd5c111610190578063c4461834116100dc578063eab45d9c11610095578063f2fde38b1161006f578063f2fde38b14610b78578063f46eccc414610ba1578063f5ecbdbc14610bde578063fc0c546a14610c1b576102e3565b8063eab45d9c14610afb578063eb8d72b714610b24578063ed629c5c14610b4d576102e3565b8063c4461834146109fc578063cbed8b9c14610a27578063cf456ae714610a50578063d1deba1f14610a79578063dd62ed3e14610a95578063df2a5b3b14610ad2576102e3565b80639f38369a11610149578063a6c3d16511610123578063a6c3d16514610942578063a9059cbb1461096b578063b353aaa7146109a8578063baf3292d146109d3576102e3565b80639f38369a1461089d5780639fd6db12146108da578063a457c2d714610905576102e3565b80637e5cd5c11461079d5780638cfd8f5c146107b45780638da5cb5b146107f15780639358928b1461081c578063950c8a741461084757806395d89b4114610872576102e3565b80633d8b38f61161024f5780634c42899a1161020857806366ad5c8a116101e257806366ad5c8a146106e357806370a082311461070c578063715018a6146107495780637533d78814610760576102e3565b80634c42899a1461065f578063519056361461068a5780635b8c41e6146106a6576102e3565b80633d8b38f61461053f5780633f1f4fa41461057c57806340c10f19146105b957806342966c68146105e257806342d65a8d1461060b5780634477051514610634576102e3565b806310ddb137116102a157806310ddb1371461040857806318160ddd1461043157806323b872dd1461045c5780632a205e3d14610499578063313ce567146104d75780633950935114610502576102e3565b80621d3567146102e857806301ffc9a71461031157806306fdde031461034e57806307e0db1714610379578063095ea7b3146103a25780630df37483146103df575b600080fd5b3480156102f457600080fd5b5061030f600480360381019061030a9190613879565b610c46565b005b34801561031d57600080fd5b5061033860048036038101906103339190613978565b610e9c565b60405161034591906139c0565b60405180910390f35b34801561035a57600080fd5b50610363610f5e565b6040516103709190613a6b565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b9190613a8d565b610ff0565b005b3480156103ae57600080fd5b506103c960048036038101906103c49190613b4e565b611086565b6040516103d691906139c0565b60405180910390f35b3480156103eb57600080fd5b5061040660048036038101906104019190613b8e565b6110a9565b005b34801561041457600080fd5b5061042f600480360381019061042a9190613a8d565b6110d5565b005b34801561043d57600080fd5b5061044661116b565b6040516104539190613bdd565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190613bf8565b611175565b60405161049091906139c0565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190613c77565b6111a4565b6040516104ce929190613d33565b60405180910390f35b3480156104e357600080fd5b506104ec611285565b6040516104f99190613d78565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190613b4e565b61128e565b60405161053691906139c0565b60405180910390f35b34801561054b57600080fd5b5061056660048036038101906105619190613d93565b6112c5565b60405161057391906139c0565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190613a8d565b611399565b6040516105b09190613bdd565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190613b4e565b6113b1565b005b3480156105ee57600080fd5b5061060960048036038101906106049190613df3565b61149a565b005b34801561061757600080fd5b50610632600480360381019061062d9190613d93565b6114a7565b005b34801561064057600080fd5b50610649611543565b6040516106569190613bdd565b60405180910390f35b34801561066b57600080fd5b50610674611548565b6040516106819190613e2f565b60405180910390f35b6106a4600480360381019061069f9190613e88565b61154d565b005b3480156106b257600080fd5b506106cd60048036038101906106c8919061409a565b6115ef565b6040516106da9190614122565b60405180910390f35b3480156106ef57600080fd5b5061070a60048036038101906107059190613879565b611637565b005b34801561071857600080fd5b50610733600480360381019061072e919061413d565b611748565b6040516107409190613bdd565b60405180910390f35b34801561075557600080fd5b5061075e611791565b005b34801561076c57600080fd5b5061078760048036038101906107829190613a8d565b6117a5565b60405161079491906141bf565b60405180910390f35b3480156107a957600080fd5b506107b2611845565b005b3480156107c057600080fd5b506107db60048036038101906107d691906141e1565b611896565b6040516107e89190613bdd565b60405180910390f35b3480156107fd57600080fd5b506108066118bb565b6040516108139190614230565b60405180910390f35b34801561082857600080fd5b506108316118e4565b60405161083e9190613bdd565b60405180910390f35b34801561085357600080fd5b5061085c6118f3565b6040516108699190614230565b60405180910390f35b34801561087e57600080fd5b50610887611919565b6040516108949190613a6b565b60405180910390f35b3480156108a957600080fd5b506108c460048036038101906108bf9190613a8d565b6119ab565b6040516108d191906141bf565b60405180910390f35b3480156108e657600080fd5b506108ef611ac4565b6040516108fc91906139c0565b60405180910390f35b34801561091157600080fd5b5061092c60048036038101906109279190613b4e565b611ad7565b60405161093991906139c0565b60405180910390f35b34801561094e57600080fd5b5061096960048036038101906109649190613d93565b611b4e565b005b34801561097757600080fd5b50610992600480360381019061098d9190613b4e565b611be2565b60405161099f91906139c0565b60405180910390f35b3480156109b457600080fd5b506109bd611c05565b6040516109ca91906142aa565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f5919061413d565b611c29565b005b348015610a0857600080fd5b50610a11611cac565b604051610a1e9190613bdd565b60405180910390f35b348015610a3357600080fd5b50610a4e6004803603810190610a4991906142c5565b611cb2565b005b348015610a5c57600080fd5b50610a776004803603810190610a72919061434d565b611d54565b005b610a936004803603810190610a8e9190613879565b611e05565b005b348015610aa157600080fd5b50610abc6004803603810190610ab7919061438d565b612048565b604051610ac99190613bdd565b60405180910390f35b348015610ade57600080fd5b50610af96004803603810190610af491906143cd565b6120cf565b005b348015610b0757600080fd5b50610b226004803603810190610b1d9190614420565b612193565b005b348015610b3057600080fd5b50610b4b6004803603810190610b469190613d93565b6121ef565b005b348015610b5957600080fd5b50610b62612262565b604051610b6f91906139c0565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a919061413d565b612275565b005b348015610bad57600080fd5b50610bc86004803603810190610bc3919061413d565b6122f8565b604051610bd591906139c0565b60405180910390f35b348015610bea57600080fd5b50610c056004803603810190610c00919061444d565b612318565b604051610c1291906141bf565b60405180910390f35b348015610c2757600080fd5b50610c306123c9565b604051610c3d9190614230565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610c856123d1565b73ffffffffffffffffffffffffffffffffffffffff1614610cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd290614500565b60405180910390fd5b6000600160008861ffff1661ffff1681526020019081526020016000208054610d039061454f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2f9061454f565b8015610d7c5780601f10610d5157610100808354040283529160200191610d7c565b820191906000526020600020905b815481529060010190602001808311610d5f57829003601f168201915b50505050509050805186869050148015610d97575060008151115b8015610dc0575080805190602001208686604051610db69291906145b0565b6040518091039020145b610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df69061463b565b60405180910390fd5b610e938787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506123d9565b50505050505050565b6000807bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f4757507f36372b07000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f575750610f56826124a4565b5b9050919050565b6060600a8054610f6d9061454f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f999061454f565b8015610fe65780601f10610fbb57610100808354040283529160200191610fe6565b820191906000526020600020905b815481529060010190602001808311610fc957829003601f168201915b5050505050905090565b610ff861251e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166307e0db17826040518263ffffffff1660e01b81526004016110519190613e2f565b600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b5050505050565b6000806110916123d1565b905061109e81858561259c565b600191505092915050565b6110b161251e565b80600360008461ffff1661ffff168152602001908152602001600020819055505050565b6110dd61251e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166310ddb137826040518263ffffffff1660e01b81526004016111369190613e2f565b600060405180830381600087803b15801561115057600080fd5b505af1158015611164573d6000803e3d6000fd5b5050505050565b6000600954905090565b6000806111806123d1565b905061118d858285612765565b6111988585856127f1565b60019150509392505050565b6000806000808989896040516020016111c09493929190614688565b60405160208183030381529060405290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166340a7bb108b30848a8a8a6040518763ffffffff1660e01b8152600401611234969594939291906146c8565b6040805180830381865afa158015611250573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112749190614740565b925092505097509795505050505050565b60006012905090565b6000806112996123d1565b90506112ba8185856112ab8589612048565b6112b591906147af565b61259c565b600191505092915050565b600080600160008661ffff1661ffff16815260200190815260200160002080546112ee9061454f565b80601f016020809104026020016040519081016040528092919081815260200182805461131a9061454f565b80156113675780601f1061133c57610100808354040283529160200191611367565b820191906000526020600020905b81548152906001019060200180831161134a57829003601f168201915b50505050509050838360405161137e9291906145b0565b60405180910390208180519060200120149150509392505050565b60036020528060005260406000206000915090505481565b600d60009054906101000a900460ff16611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f79061482f565b60405180910390fd5b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661148c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114839061489b565b60405180910390fd5b6114968282612a6a565b5050565b6114a43382612bc1565b50565b6114af61251e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342d65a8d8484846040518463ffffffff1660e01b815260040161150c939291906148bb565b600060405180830381600087803b15801561152657600080fd5b505af115801561153a573d6000803e3d6000fd5b50505050505050565b600081565b600081565b6115e4898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612d90565b505050505050505050565b60056020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050505481565b3073ffffffffffffffffffffffffffffffffffffffff166116566123d1565b73ffffffffffffffffffffffffffffffffffffffff16146116ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a39061495f565b60405180910390fd5b6117408686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612e44565b505050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61179961251e565b6117a36000612eb0565b565b600160205280600052604060002060009150905080546117c49061454f565b80601f01602080910402602001604051908101604052809291908181526020018280546117f09061454f565b801561183d5780601f106118125761010080835404028352916020019161183d565b820191906000526020600020905b81548152906001019060200180831161182057829003601f168201915b505050505081565b61184d61251e565b6000600d60006101000a81548160ff0219169083151502179055507faf79b4370f6af9d950564bbe6b81f7f0834c003c455db9248f4e55e6bf865eb760405160405180910390a1565b6002602052816000526040600020602052806000526040600020600091509150505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006118ee61116b565b905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b80546119289061454f565b80601f01602080910402602001604051908101604052809291908181526020018280546119549061454f565b80156119a15780601f10611976576101008083540402835291602001916119a1565b820191906000526020600020905b81548152906001019060200180831161198457829003601f168201915b5050505050905090565b60606000600160008461ffff1661ffff16815260200190815260200160002080546119d59061454f565b80601f0160208091040260200160405190810160405280929190818152602001828054611a019061454f565b8015611a4e5780601f10611a2357610100808354040283529160200191611a4e565b820191906000526020600020905b815481529060010190602001808311611a3157829003601f168201915b505050505090506000815103611a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a90906149cb565b60405180910390fd5b611abc600060148351611aac91906149eb565b83612f749092919063ffffffff16565b915050919050565b600d60009054906101000a900460ff1681565b600080611ae26123d1565b90506000611af08286612048565b905083811015611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c90614a91565b60405180910390fd5b611b42828686840361259c565b60019250505092915050565b611b5661251e565b818130604051602001611b6b93929190614af9565b604051602081830303815290604052600160008561ffff1661ffff1681526020019081526020016000209081611ba19190614cc5565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611bd5939291906148bb565b60405180910390a1505050565b600080611bed6123d1565b9050611bfa8185856127f1565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b611c3161251e565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b81604051611ca19190614230565b60405180910390a150565b61271081565b611cba61251e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663cbed8b9c86868686866040518663ffffffff1660e01b8152600401611d1b959493929190614d97565b600060405180830381600087803b158015611d3557600080fd5b505af1158015611d49573d6000803e3d6000fd5b505050505050505050565b611d5c61251e565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1f96bc657d385fd83da973a43f2ad969e6d96b6779b779571a7306db7ca1cd0082604051611df991906139c0565b60405180910390a25050565b6000600560008861ffff1661ffff1681526020019081526020016000208686604051611e329291906145b0565b908152602001604051809103902060008567ffffffffffffffff1667ffffffffffffffff1681526020019081526020016000205490506000801b8103611ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea490614e57565b60405180910390fd5b808383604051611ebe9291906145b0565b604051809103902014611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd90614ee9565b60405180910390fd5b6000801b600560008961ffff1661ffff1681526020019081526020016000208787604051611f359291906145b0565b908152602001604051809103902060008667ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020819055506120008787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612e44565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051612037959493929190614f18565b60405180910390a150505050505050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120d761251e565b6000811161211a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211190614fb2565b60405180910390fd5b80600260008561ffff1661ffff16815260200190815260200160002060008461ffff1661ffff168152602001908152602001600020819055507f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac083838360405161218693929190614fd2565b60405180910390a1505050565b61219b61251e565b80600660006101000a81548160ff0219169083151502179055507f1584ad594a70cbe1e6515592e1272a987d922b097ead875069cebe8b40c004a4816040516121e491906139c0565b60405180910390a150565b6121f761251e565b8181600160008661ffff1661ffff1681526020019081526020016000209182612221929190615014565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051612255939291906148bb565b60405180910390a1505050565b600660009054906101000a900460ff1681565b61227d61251e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e390615156565b60405180910390fd5b6122f581612eb0565b50565b600c6020528060005260406000206000915054906101000a900460ff1681565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f5ecbdbc868630866040518563ffffffff1660e01b81526004016123799493929190615176565b600060405180830381865afa158015612396573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906123bf919061522b565b9050949350505050565b600030905090565b600033905090565b6000806124855a60966366ad5c8a60e01b898989896040516024016124019493929190615274565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050503073ffffffffffffffffffffffffffffffffffffffff16613092909392919063ffffffff16565b915091508161249c5761249b868686868561312a565b5b505050505050565b60007f14e4ceea000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125175750612516826131d8565b5b9050919050565b6125266123d1565b73ffffffffffffffffffffffffffffffffffffffff166125446118bb565b73ffffffffffffffffffffffffffffffffffffffff161461259a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259190615313565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361260b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612602906153a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361267a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267190615437565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127589190613bdd565b60405180910390a3505050565b60006127718484612048565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146127eb57818110156127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d4906154a3565b60405180910390fd5b6127ea848484840361259c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285790615535565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c6906155c7565b60405180910390fd5b6128da838383613242565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295890615659565b60405180910390fd5b818103600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a519190613bdd565b60405180910390a3612a64848484613247565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad0906156c5565b60405180910390fd5b612ae560008383613242565b8060096000828254612af791906147af565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ba99190613bdd565b60405180910390a3612bbd60008383613247565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2790615757565b60405180910390fd5b612c3c82600083613242565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba906157e9565b60405180910390fd5b818103600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600960008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d779190613bdd565b60405180910390a3612d8b83600084613247565b505050565b612d9e86600083600061324c565b6000612dac888888886132bd565b90506000808783604051602001612dc593929190615809565b6040516020818303038152906040529050612de488828787873461331f565b8873ffffffffffffffffffffffffffffffffffffffff168861ffff167f39a4c66499bcf4b56d79f0dde8ed7a9d4925a0df55825206b2b8531e202be0d08985604051612e31929190615847565b60405180910390a3505050505050505050565b600060208201519050600061ffff168161ffff1603612e6e57612e69858585856134b5565b612ea9565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea0906158c3565b60405180910390fd5b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606081601f83612f8491906147af565b1015612fc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbc9061592f565b60405180910390fd5b8183612fd191906147af565b84511015613014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300b9061599b565b60405180910390fd5b60608215600081146130355760405191506000825260208201604052613086565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156130735780518352602083019250602081019050613056565b50868552601f19601f8301166040525050505b50809150509392505050565b6000606060008060008661ffff1667ffffffffffffffff8111156130b9576130b8613f6f565b5b6040519080825280601f01601f1916602001820160405280156130eb5781602001600182028036833780820191505090505b50905060008087516020890160008d8df191503d92508683111561310d578692505b828152826000602083013e81819450945050505094509492505050565b8180519060200120600560008761ffff1661ffff1681526020019081526020016000208560405161315b91906159ec565b908152602001604051809103902060008567ffffffffffffffff1667ffffffffffffffff168152602001908152602001600020819055507fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c85858585856040516131c9959493929190615a03565b60405180910390a15050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b505050565b600660009054906101000a900460ff16156132725761326d84848484613552565b6132b7565b60008251146132b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ad90615add565b60405180910390fd5b5b50505050565b6000806132c86123d1565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461330957613308868285612765565b5b6133138684612bc1565b82915050949350505050565b6000600160008861ffff1661ffff16815260200190815260200160002080546133479061454f565b80601f01602080910402602001604051908101604052809291908181526020018280546133739061454f565b80156133c05780601f10613395576101008083540402835291602001916133c0565b820191906000526020600020905b8154815290600101906020018083116133a357829003601f168201915b50505050509050600081510361340b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340290615b6f565b60405180910390fd5b613416878751613631565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c58031008389848a8a8a8a6040518863ffffffff1660e01b815260040161347a96959493929190615b9e565b6000604051808303818588803b15801561349357600080fd5b505af11580156134a7573d6000803e3d6000fd5b505050505050505050505050565b600080828060200190518101906134cc9190615c29565b925092505060006134e76000846136a790919063ffffffff16565b90506134f487828461371d565b91508073ffffffffffffffffffffffffffffffffffffffff168761ffff167fbf551ec93859b170f9b2141bd9298bf3f64322c6f7beb2543a0cb669834118bf846040516135419190613bdd565b60405180910390a350505050505050565b600061355d83613733565b9050600082600260008861ffff1661ffff16815260200190815260200160002060008761ffff1661ffff168152602001908152602001600020546135a191906147af565b9050600081116135e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135dd90615ce4565b60405180910390fd5b80821015613629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362090615d50565b60405180910390fd5b505050505050565b6000600360008461ffff1661ffff1681526020019081526020016000205490506000810361365f5761271090505b808211156136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369990615dbc565b60405180910390fd5b505050565b60006014826136b691906147af565b835110156136f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f090615e28565b60405180910390fd5b60006c01000000000000000000000000836020860101510490508091505092915050565b60006137298383612a6a565b8190509392505050565b600060228251101561377a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377190615e94565b60405180910390fd5b60228201519050919050565b6000604051905090565b600080fd5b600080fd5b600061ffff82169050919050565b6137b18161379a565b81146137bc57600080fd5b50565b6000813590506137ce816137a8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137f9576137f86137d4565b5b8235905067ffffffffffffffff811115613816576138156137d9565b5b602083019150836001820283011115613832576138316137de565b5b9250929050565b600067ffffffffffffffff82169050919050565b61385681613839565b811461386157600080fd5b50565b6000813590506138738161384d565b92915050565b6000806000806000806080878903121561389657613895613790565b5b60006138a489828a016137bf565b965050602087013567ffffffffffffffff8111156138c5576138c4613795565b5b6138d189828a016137e3565b955095505060406138e489828a01613864565b935050606087013567ffffffffffffffff81111561390557613904613795565b5b61391189828a016137e3565b92509250509295509295509295565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61395581613920565b811461396057600080fd5b50565b6000813590506139728161394c565b92915050565b60006020828403121561398e5761398d613790565b5b600061399c84828501613963565b91505092915050565b60008115159050919050565b6139ba816139a5565b82525050565b60006020820190506139d560008301846139b1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a155780820151818401526020810190506139fa565b60008484015250505050565b6000601f19601f8301169050919050565b6000613a3d826139db565b613a4781856139e6565b9350613a578185602086016139f7565b613a6081613a21565b840191505092915050565b60006020820190508181036000830152613a858184613a32565b905092915050565b600060208284031215613aa357613aa2613790565b5b6000613ab1848285016137bf565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ae582613aba565b9050919050565b613af581613ada565b8114613b0057600080fd5b50565b600081359050613b1281613aec565b92915050565b6000819050919050565b613b2b81613b18565b8114613b3657600080fd5b50565b600081359050613b4881613b22565b92915050565b60008060408385031215613b6557613b64613790565b5b6000613b7385828601613b03565b9250506020613b8485828601613b39565b9150509250929050565b60008060408385031215613ba557613ba4613790565b5b6000613bb3858286016137bf565b9250506020613bc485828601613b39565b9150509250929050565b613bd781613b18565b82525050565b6000602082019050613bf26000830184613bce565b92915050565b600080600060608486031215613c1157613c10613790565b5b6000613c1f86828701613b03565b9350506020613c3086828701613b03565b9250506040613c4186828701613b39565b9150509250925092565b613c54816139a5565b8114613c5f57600080fd5b50565b600081359050613c7181613c4b565b92915050565b600080600080600080600060a0888a031215613c9657613c95613790565b5b6000613ca48a828b016137bf565b975050602088013567ffffffffffffffff811115613cc557613cc4613795565b5b613cd18a828b016137e3565b96509650506040613ce48a828b01613b39565b9450506060613cf58a828b01613c62565b935050608088013567ffffffffffffffff811115613d1657613d15613795565b5b613d228a828b016137e3565b925092505092959891949750929550565b6000604082019050613d486000830185613bce565b613d556020830184613bce565b9392505050565b600060ff82169050919050565b613d7281613d5c565b82525050565b6000602082019050613d8d6000830184613d69565b92915050565b600080600060408486031215613dac57613dab613790565b5b6000613dba868287016137bf565b935050602084013567ffffffffffffffff811115613ddb57613dda613795565b5b613de7868287016137e3565b92509250509250925092565b600060208284031215613e0957613e08613790565b5b6000613e1784828501613b39565b91505092915050565b613e298161379a565b82525050565b6000602082019050613e446000830184613e20565b92915050565b6000613e5582613aba565b9050919050565b613e6581613e4a565b8114613e7057600080fd5b50565b600081359050613e8281613e5c565b92915050565b600080600080600080600080600060e08a8c031215613eaa57613ea9613790565b5b6000613eb88c828d01613b03565b9950506020613ec98c828d016137bf565b98505060408a013567ffffffffffffffff811115613eea57613ee9613795565b5b613ef68c828d016137e3565b97509750506060613f098c828d01613b39565b9550506080613f1a8c828d01613e73565b94505060a0613f2b8c828d01613b03565b93505060c08a013567ffffffffffffffff811115613f4c57613f4b613795565b5b613f588c828d016137e3565b92509250509295985092959850929598565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fa782613a21565b810181811067ffffffffffffffff82111715613fc657613fc5613f6f565b5b80604052505050565b6000613fd9613786565b9050613fe58282613f9e565b919050565b600067ffffffffffffffff82111561400557614004613f6f565b5b61400e82613a21565b9050602081019050919050565b82818337600083830152505050565b600061403d61403884613fea565b613fcf565b90508281526020810184848401111561405957614058613f6a565b5b61406484828561401b565b509392505050565b600082601f830112614081576140806137d4565b5b813561409184826020860161402a565b91505092915050565b6000806000606084860312156140b3576140b2613790565b5b60006140c1868287016137bf565b935050602084013567ffffffffffffffff8111156140e2576140e1613795565b5b6140ee8682870161406c565b92505060406140ff86828701613864565b9150509250925092565b6000819050919050565b61411c81614109565b82525050565b60006020820190506141376000830184614113565b92915050565b60006020828403121561415357614152613790565b5b600061416184828501613b03565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60006141918261416a565b61419b8185614175565b93506141ab8185602086016139f7565b6141b481613a21565b840191505092915050565b600060208201905081810360008301526141d98184614186565b905092915050565b600080604083850312156141f8576141f7613790565b5b6000614206858286016137bf565b9250506020614217858286016137bf565b9150509250929050565b61422a81613ada565b82525050565b60006020820190506142456000830184614221565b92915050565b6000819050919050565b600061427061426b61426684613aba565b61424b565b613aba565b9050919050565b600061428282614255565b9050919050565b600061429482614277565b9050919050565b6142a481614289565b82525050565b60006020820190506142bf600083018461429b565b92915050565b6000806000806000608086880312156142e1576142e0613790565b5b60006142ef888289016137bf565b9550506020614300888289016137bf565b945050604061431188828901613b39565b935050606086013567ffffffffffffffff81111561433257614331613795565b5b61433e888289016137e3565b92509250509295509295909350565b6000806040838503121561436457614363613790565b5b600061437285828601613b03565b925050602061438385828601613c62565b9150509250929050565b600080604083850312156143a4576143a3613790565b5b60006143b285828601613b03565b92505060206143c385828601613b03565b9150509250929050565b6000806000606084860312156143e6576143e5613790565b5b60006143f4868287016137bf565b9350506020614405868287016137bf565b925050604061441686828701613b39565b9150509250925092565b60006020828403121561443657614435613790565b5b600061444484828501613c62565b91505092915050565b6000806000806080858703121561446757614466613790565b5b6000614475878288016137bf565b9450506020614486878288016137bf565b935050604061449787828801613b03565b92505060606144a887828801613b39565b91505092959194509250565b7f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c65720000600082015250565b60006144ea601e836139e6565b91506144f5826144b4565b602082019050919050565b60006020820190508181036000830152614519816144dd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061456757607f821691505b60208210810361457a57614579614520565b5b50919050565b600081905092915050565b60006145978385614580565b93506145a483858461401b565b82840190509392505050565b60006145bd82848661458b565b91508190509392505050565b7f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006146256026836139e6565b9150614630826145c9565b604082019050919050565b6000602082019050818103600083015261465481614618565b9050919050565b60006146678385614175565b935061467483858461401b565b61467d83613a21565b840190509392505050565b600060608201905061469d6000830187613e20565b81810360208301526146b081858761465b565b90506146bf6040830184613bce565b95945050505050565b600060a0820190506146dd6000830189613e20565b6146ea6020830188614221565b81810360408301526146fc8187614186565b905061470b60608301866139b1565b818103608083015261471e81848661465b565b9050979650505050505050565b60008151905061473a81613b22565b92915050565b6000806040838503121561475757614756613790565b5b60006147658582860161472b565b92505060206147768582860161472b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147ba82613b18565b91506147c583613b18565b92508282019050808211156147dd576147dc614780565b5b92915050565b7f4d696e74696e672064697361626c656400000000000000000000000000000000600082015250565b60006148196010836139e6565b9150614824826147e3565b602082019050919050565b600060208201905081810360008301526148488161480c565b9050919050565b7f496e76616c6964206d696e746572000000000000000000000000000000000000600082015250565b6000614885600e836139e6565b91506148908261484f565b602082019050919050565b600060208201905081810360008301526148b481614878565b9050919050565b60006040820190506148d06000830186613e20565b81810360208301526148e381848661465b565b9050949350505050565b7f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560008201527f204c7a4170700000000000000000000000000000000000000000000000000000602082015250565b60006149496026836139e6565b9150614954826148ed565b604082019050919050565b600060208201905081810360008301526149788161493c565b9050919050565b7f4c7a4170703a206e6f20747275737465642070617468207265636f7264000000600082015250565b60006149b5601d836139e6565b91506149c08261497f565b602082019050919050565b600060208201905081810360008301526149e4816149a8565b9050919050565b60006149f682613b18565b9150614a0183613b18565b9250828203905081811115614a1957614a18614780565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614a7b6025836139e6565b9150614a8682614a1f565b604082019050919050565b60006020820190508181036000830152614aaa81614a6e565b9050919050565b60008160601b9050919050565b6000614ac982614ab1565b9050919050565b6000614adb82614abe565b9050919050565b614af3614aee82613ada565b614ad0565b82525050565b6000614b0682858761458b565b9150614b128284614ae2565b601482019150819050949350505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614b857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614b48565b614b8f8683614b48565b95508019841693508086168417925050509392505050565b6000614bc2614bbd614bb884613b18565b61424b565b613b18565b9050919050565b6000819050919050565b614bdc83614ba7565b614bf0614be882614bc9565b848454614b55565b825550505050565b600090565b614c05614bf8565b614c10818484614bd3565b505050565b5b81811015614c3457614c29600082614bfd565b600181019050614c16565b5050565b601f821115614c7957614c4a81614b23565b614c5384614b38565b81016020851015614c62578190505b614c76614c6e85614b38565b830182614c15565b50505b505050565b600082821c905092915050565b6000614c9c60001984600802614c7e565b1980831691505092915050565b6000614cb58383614c8b565b9150826002028217905092915050565b614cce8261416a565b67ffffffffffffffff811115614ce757614ce6613f6f565b5b614cf1825461454f565b614cfc828285614c38565b600060209050601f831160018114614d2f5760008415614d1d578287015190505b614d278582614ca9565b865550614d8f565b601f198416614d3d86614b23565b60005b82811015614d6557848901518255600182019150602085019450602081019050614d40565b86831015614d825784890151614d7e601f891682614c8b565b8355505b6001600288020188555050505b505050505050565b6000608082019050614dac6000830188613e20565b614db96020830187613e20565b614dc66040830186613bce565b8181036060830152614dd981848661465b565b90509695505050505050565b7f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360008201527f6167650000000000000000000000000000000000000000000000000000000000602082015250565b6000614e416023836139e6565b9150614e4c82614de5565b604082019050919050565b60006020820190508181036000830152614e7081614e34565b9050919050565b7f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ed36021836139e6565b9150614ede82614e77565b604082019050919050565b60006020820190508181036000830152614f0281614ec6565b9050919050565b614f1281613839565b82525050565b6000608082019050614f2d6000830188613e20565b8181036020830152614f4081868861465b565b9050614f4f6040830185614f09565b614f5c6060830184614113565b9695505050505050565b7f4c7a4170703a20696e76616c6964206d696e4761730000000000000000000000600082015250565b6000614f9c6015836139e6565b9150614fa782614f66565b602082019050919050565b60006020820190508181036000830152614fcb81614f8f565b9050919050565b6000606082019050614fe76000830186613e20565b614ff46020830185613e20565b6150016040830184613bce565b949350505050565b600082905092915050565b61501e8383615009565b67ffffffffffffffff81111561503757615036613f6f565b5b615041825461454f565b61504c828285614c38565b6000601f83116001811461507b5760008415615069578287013590505b6150738582614ca9565b8655506150db565b601f19841661508986614b23565b60005b828110156150b15784890135825560018201915060208501945060208101905061508c565b868310156150ce57848901356150ca601f891682614c8b565b8355505b6001600288020188555050505b50505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151406026836139e6565b915061514b826150e4565b604082019050919050565b6000602082019050818103600083015261516f81615133565b9050919050565b600060808201905061518b6000830187613e20565b6151986020830186613e20565b6151a56040830185614221565b6151b26060830184613bce565b95945050505050565b60006151ce6151c984613fea565b613fcf565b9050828152602081018484840111156151ea576151e9613f6a565b5b6151f58482856139f7565b509392505050565b600082601f830112615212576152116137d4565b5b81516152228482602086016151bb565b91505092915050565b60006020828403121561524157615240613790565b5b600082015167ffffffffffffffff81111561525f5761525e613795565b5b61526b848285016151fd565b91505092915050565b60006080820190506152896000830187613e20565b818103602083015261529b8186614186565b90506152aa6040830185614f09565b81810360608301526152bc8184614186565b905095945050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006152fd6020836139e6565b9150615308826152c7565b602082019050919050565b6000602082019050818103600083015261532c816152f0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061538f6024836139e6565b915061539a82615333565b604082019050919050565b600060208201905081810360008301526153be81615382565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006154216022836139e6565b915061542c826153c5565b604082019050919050565b6000602082019050818103600083015261545081615414565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061548d601d836139e6565b915061549882615457565b602082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061551f6025836139e6565b915061552a826154c3565b604082019050919050565b6000602082019050818103600083015261554e81615512565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155b16023836139e6565b91506155bc82615555565b604082019050919050565b600060208201905081810360008301526155e0816155a4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006156436026836139e6565b915061564e826155e7565b604082019050919050565b6000602082019050818103600083015261567281615636565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006156af601f836139e6565b91506156ba82615679565b602082019050919050565b600060208201905081810360008301526156de816156a2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006157416021836139e6565b915061574c826156e5565b604082019050919050565b6000602082019050818103600083015261577081615734565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006157d36022836139e6565b91506157de82615777565b604082019050919050565b60006020820190508181036000830152615802816157c6565b9050919050565b600060608201905061581e6000830186613e20565b81810360208301526158308185614186565b905061583f6040830184613bce565b949350505050565b600060408201905081810360008301526158618185614186565b90506158706020830184613bce565b9392505050565b7f4f4654436f72653a20756e6b6e6f776e207061636b6574207479706500000000600082015250565b60006158ad601c836139e6565b91506158b882615877565b602082019050919050565b600060208201905081810360008301526158dc816158a0565b9050919050565b7f736c6963655f6f766572666c6f77000000000000000000000000000000000000600082015250565b6000615919600e836139e6565b9150615924826158e3565b602082019050919050565b600060208201905081810360008301526159488161590c565b9050919050565b7f736c6963655f6f75744f66426f756e6473000000000000000000000000000000600082015250565b60006159856011836139e6565b91506159908261594f565b602082019050919050565b600060208201905081810360008301526159b481615978565b9050919050565b60006159c68261416a565b6159d08185614580565b93506159e08185602086016139f7565b80840191505092915050565b60006159f882846159bb565b915081905092915050565b600060a082019050615a186000830188613e20565b8181036020830152615a2a8187614186565b9050615a396040830186614f09565b8181036060830152615a4b8185614186565b90508181036080830152615a5f8184614186565b90509695505050505050565b7f4f4654436f72653a205f61646170746572506172616d73206d7573742062652060008201527f656d7074792e0000000000000000000000000000000000000000000000000000602082015250565b6000615ac76026836139e6565b9150615ad282615a6b565b604082019050919050565b60006020820190508181036000830152615af681615aba565b9050919050565b7f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060008201527f61207472757374656420736f7572636500000000000000000000000000000000602082015250565b6000615b596030836139e6565b9150615b6482615afd565b604082019050919050565b60006020820190508181036000830152615b8881615b4c565b9050919050565b615b9881613e4a565b82525050565b600060c082019050615bb36000830189613e20565b8181036020830152615bc58188614186565b90508181036040830152615bd98187614186565b9050615be86060830186615b8f565b615bf56080830185614221565b81810360a0830152615c078184614186565b9050979650505050505050565b600081519050615c23816137a8565b92915050565b600080600060608486031215615c4257615c41613790565b5b6000615c5086828701615c14565b935050602084015167ffffffffffffffff811115615c7157615c70613795565b5b615c7d868287016151fd565b9250506040615c8e8682870161472b565b9150509250925092565b7f4c7a4170703a206d696e4761734c696d6974206e6f7420736574000000000000600082015250565b6000615cce601a836139e6565b9150615cd982615c98565b602082019050919050565b60006020820190508181036000830152615cfd81615cc1565b9050919050565b7f4c7a4170703a20676173206c696d697420697320746f6f206c6f770000000000600082015250565b6000615d3a601b836139e6565b9150615d4582615d04565b602082019050919050565b60006020820190508181036000830152615d6981615d2d565b9050919050565b7f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c61726765600082015250565b6000615da66020836139e6565b9150615db182615d70565b602082019050919050565b60006020820190508181036000830152615dd581615d99565b9050919050565b7f746f416464726573735f6f75744f66426f756e64730000000000000000000000600082015250565b6000615e126015836139e6565b9150615e1d82615ddc565b602082019050919050565b60006020820190508181036000830152615e4181615e05565b9050919050565b7f4c7a4170703a20696e76616c69642061646170746572506172616d7300000000600082015250565b6000615e7e601c836139e6565b9150615e8982615e48565b602082019050919050565b60006020820190508181036000830152615ead81615e71565b905091905056fea2646970667358221220a0b5cb6fab42b2204743a172244ec8583bca41556cd1c4ec674391d7174f921364736f6c6343000814003300000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000a426574737761702e67670000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044253474700000000000000000000000000000000000000000000000000000000