UNPKG

baluni-contracts

Version:
515 lines 75 kB
{ "_format": "hh-sol-artifact-1", "contractName": "BaluniV1PoolPeriphery", "sourceName": "contracts/pools/BaluniV1PoolPeriphery.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "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": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "fromTokens", "type": "address[]" }, { "internalType": "address[]", "name": "toTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "address[]", "name": "receivers", "type": "address[]" } ], "name": "batchSwap", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "fromToken", "type": "address" }, { "internalType": "address", "name": "toToken", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getAmountOut", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "getPoolsContainingToken", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVersion", "outputs": [ { "internalType": "uint64", "name": "", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_registry", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "poolsReserves", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "tokenPath", "type": "address[]" }, { "internalType": "address[]", "name": "poolPath", "type": "address[]" }, { "internalType": "uint256", "name": "fromAmount", "type": "uint256" } ], "name": "quotePotentialSwaps", "outputs": [ { "internalType": "uint256", "name": "potentialOutcome", "type": "uint256" }, { "internalType": "uint256", "name": "haircut", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "registry", "outputs": [ { "internalType": "contract IBaluniV1Registry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_registry", "type": "address" }, { "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "reinitialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "fromToken", "type": "address" }, { "internalType": "address", "name": "toToken", "type": "address" }, { "internalType": "uint256", "name": "fromAmount", "type": "uint256" }, { "internalType": "uint256", "name": "minAmount", "type": "uint256" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "swapTokenForToken", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "haircut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "tokenPath", "type": "address[]" }, { "internalType": "address[]", "name": "poolPath", "type": "address[]" }, { "internalType": "uint256", "name": "fromAmount", "type": "uint256" }, { "internalType": "uint256", "name": "minimumToAmount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "swapTokensForTokens", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "uint256", "name": "haircut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "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" } ], "bytecode": "0x60a060405234603957600e6047565b6014603d565b613e3c6100a48239608051818181613562015281816135e701526137e20152613e3c90f35b6043565b60405190565b5f80fd5b604d604f565b565b60556057565b565b605d6097565b565b60018060a01b031690565b90565b607c6078608092605f565b606a565b605f565b90565b608a90606d565b90565b6094906083565b90565b609e30608d565b60805256fe60806040526004361015610013575b610ed0565b61001d5f3561012c565b80630d8e6e2c1461012757806321579b791461012257806335823d761461011d5780634056c37f146101185780634209bed0146101135780634aa066521461010e5780634f1ef2861461010957806352d1902d14610104578063715018a6146100ff5780637b103999146100fa5780638da5cb5b146100f55780638f2248bc146100f0578063ad3cb1cc146100eb578063ae3cce1c146100e6578063c4d66de8146100e1578063e74e9b06146100dc5763f2fde38b0361000e57610e9d565b610e5e565b610c5b565b610c26565b610b34565b610a04565b61097f565b610928565b61087b565b610846565b6107f7565b6106ec565b61067b565b6105da565b6104aa565b6103fd565b61017e565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f91031261014a57565b61013c565b67ffffffffffffffff1690565b6101659061014f565b9052565b919061017c905f6020850194019061015c565b565b346101ae5761018e366004610140565b6101aa610199610ed8565b6101a1610132565b91829182610169565b0390f35b610138565b5f80fd5b5f80fd5b601f801991011690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b906101fc906101bb565b810190811067ffffffffffffffff82111761021657604052565b6101c5565b9061022e610227610132565b92836101f2565b565b67ffffffffffffffff81116102485760208091020190565b6101c5565b5f80fd5b73ffffffffffffffffffffffffffffffffffffffff1690565b61027390610251565b90565b61027f8161026a565b0361028657565b5f80fd5b9050359061029782610276565b565b909291926102ae6102a982610230565b61021b565b93818552602080860192028301928184116102eb57915b8383106102d25750505050565b602080916102e0848661028a565b8152019201916102c5565b61024d565b9080601f8301121561030e5781602061030b93359101610299565b90565b6101b7565b90565b61031f81610313565b0361032657565b5f80fd5b9050359061033782610316565b565b909160c0828403126103c8575f82013567ffffffffffffffff81116103c357836103649184016102f0565b92602083013567ffffffffffffffff81116103be57816103859185016102f0565b92610393826040830161032a565b926103bb6103a4846060850161032a565b936103b2816080860161028a565b9360a00161032a565b90565b6101b3565b6101b3565b61013c565b6103d690610313565b9052565b9160206103fb9294936103f460408201965f8301906103cd565b01906103cd565b565b346104355761041c610410366004610339565b94939093929192611666565b90610431610428610132565b928392836103da565b0390f35b610138565b60e0818303126104a557610450825f830161028a565b9261045e836020840161028a565b9261046c816040850161032a565b9261047a826060830161032a565b926104a261048b846080850161028a565b936104998160a0860161028a565b9360c00161032a565b90565b61013c565b346104e2576104c96104bd36600461043a565b95949094939193611bb7565b906104de6104d5610132565b928392836103da565b0390f35b610138565b919060408382031261050f578061050361050c925f860161028a565b9360200161028a565b90565b61013c565b90565b61052b61052661053092610251565b610514565b610251565b90565b61053c90610517565b90565b61054890610533565b90565b906105559061053f565b5f5260205260405f2090565b9061056b9061053f565b5f5260205260405f2090565b1c90565b90565b61058e9060086105939302610577565b61057b565b90565b906105a1915461057e565b90565b6105bd6105c2926105b86001935f9461054b565b610561565b610596565b90565b91906105d8905f602085019401906103cd565b565b3461060b576106076105f66105f03660046104e7565b906105a4565b6105fe610132565b918291826105c5565b0390f35b610138565b9091606082840312610676575f82013567ffffffffffffffff8111610671578361063b9184016102f0565b9260208301359067ffffffffffffffff821161066c57610660816106699386016102f0565b9360400161032a565b90565b6101b3565b6101b3565b61013c565b346106ad5761069461068e366004610610565b91611d5f565b906106a96106a0610132565b928392836103da565b0390f35b610138565b90916060828403126106e7576106e46106cd845f850161028a565b936106db816020860161028a565b9360400161032a565b90565b61013c565b3461071d576107196107086107023660046106b2565b9161201d565b610710610132565b918291826105c5565b0390f35b610138565b5f80fd5b67ffffffffffffffff8111610744576107406020916101bb565b0190565b6101c5565b90825f939282370152565b9092919261076961076482610726565b61021b565b938185526020850190828401116107855761078392610749565b565b610722565b9080601f830112156107a8578160206107a593359101610754565b90565b6101b7565b9190916040818403126107ed576107c6835f830161028a565b92602082013567ffffffffffffffff81116107e8576107e5920161078a565b90565b6101b3565b61013c565b5f0190565b61080b6108053660046107ad565b906121e6565b610813610132565b8061081d816107f2565b0390f35b90565b61082d90610821565b9052565b9190610844905f60208501940190610824565b565b3461087657610856366004610140565b610872610861612266565b610869610132565b91829182610831565b0390f35b610138565b346108a95761088b366004610140565b61089361229e565b61089b610132565b806108a5816107f2565b0390f35b610138565b73ffffffffffffffffffffffffffffffffffffffff1690565b6108d79060086108dc9302610577565b6108ae565b90565b906108ea91546108c7565b90565b6108f75f806108df565b90565b61090390610533565b90565b61090f906108fa565b9052565b9190610926905f60208501940190610906565b565b3461095857610938366004610140565b6109546109436108ed565b61094b610132565b91829182610913565b0390f35b610138565b6109669061026a565b9052565b919061097d905f6020850194019061095d565b565b346109af5761098f366004610140565b6109ab61099a6122e6565b6109a2610132565b9182918261096a565b0390f35b610138565b6109bd8161014f565b036109c457565b5f80fd5b905035906109d5826109b4565b565b91906040838203126109ff57806109f36109fc925f860161028a565b936020016109c8565b90565b61013c565b34610a3357610a1d610a173660046109d7565b90612581565b610a25610132565b80610a2f816107f2565b0390f35b610138565b67ffffffffffffffff8111610a5657610a526020916101bb565b0190565b6101c5565b90610a6d610a6883610a38565b61021b565b918252565b5f7f352e302e30000000000000000000000000000000000000000000000000000000910152565b610aa36005610a5b565b90610ab060208301610a72565b565b610aba610a99565b90565b610ac5610ab2565b90565b610ad0610abd565b90565b5190565b60209181520190565b90825f9392825e0152565b610b0a610b13602093610b1893610b0181610ad3565b93848093610ad7565b95869101610ae0565b6101bb565b0190565b610b319160208201915f818403910152610aeb565b90565b34610b6457610b44366004610140565b610b60610b4f610ac8565b610b57610132565b91829182610b1c565b0390f35b610138565b90602082820312610b8257610b7f915f0161028a565b90565b61013c565b5190565b60209181520190565b60200190565b610ba39061026a565b9052565b90610bb481602093610b9a565b0190565b60200190565b90610bdb610bd5610bce84610b87565b8093610b8b565b92610b94565b905f5b818110610beb5750505090565b909192610c04610bfe6001928651610ba7565b94610bb8565b9101919091610bde565b610c239160208201915f818403910152610bbe565b90565b34610c5657610c52610c41610c3c366004610b69565b612641565b610c49610132565b91829182610c0e565b0390f35b610138565b34610c8957610c73610c6e366004610b69565b61294e565b610c7b610132565b80610c85816107f2565b0390f35b610138565b5f80fd5b909182601f83011215610ccc5781359167ffffffffffffffff8311610cc7576020019260208302840111610cc257565b61024d565b610c8e565b6101b7565b909182601f83011215610d0b5781359167ffffffffffffffff8311610d06576020019260208302840111610d0157565b61024d565b610c8e565b6101b7565b9091608082840312610dba575f82013567ffffffffffffffff8111610db55783610d3b918401610c92565b929093602082013567ffffffffffffffff8111610db05781610d5e918401610c92565b929093604082013567ffffffffffffffff8111610dab5783610d81918401610cd1565b929093606082013567ffffffffffffffff8111610da657610da29201610c92565b9091565b6101b3565b6101b3565b6101b3565b6101b3565b61013c565b5190565b60209181520190565b60200190565b610ddb90610313565b9052565b90610dec81602093610dd2565b0190565b60200190565b90610e13610e0d610e0684610dbf565b8093610dc3565b92610dcc565b905f5b818110610e235750505090565b909192610e3c610e366001928651610ddf565b94610df0565b9101919091610e16565b610e5b9160208201915f818403910152610df6565b90565b34610e9857610e94610e83610e74366004610d10565b96959095949194939293612b8f565b610e8b610132565b91829182610e46565b0390f35b610138565b34610ecb57610eb5610eb0366004610b69565b612e8d565b610ebd610132565b80610ec7816107f2565b0390f35b610138565b5f80fd5b5f90565b610ee0610ed4565b50610ee9612e98565b90565b5f90565b5f7f4558504952454400000000000000000000000000000000000000000000000000910152565b610f246007602092610ad7565b610f2d81610ef0565b0190565b610f469060208101905f818303910152610f17565b90565b15610f5057565b610f58610132565b7f08c379a000000000000000000000000000000000000000000000000000000000815280610f8860048201610f31565b0390fd5b90610fb997969594939291610fb488610fad610fa742610313565b91610313565b1015610f49565b610fbd565b9091565b90610fd597969594939291610fd0612f58565b6114dc565b9091610fdf612fe8565b565b90565b610ff8610ff3610ffd92610fe1565b610514565b610313565b90565b5f7f696e76616c69642066726f6d20616d6f756e7400000000000000000000000000910152565b6110346013602092610ad7565b61103d81611000565b0190565b6110569060208101905f818303910152611027565b90565b1561106057565b611068610132565b7f08c379a00000000000000000000000000000000000000000000000000000000081528061109860048201611041565b0390fd5b90565b6110b36110ae6110b89261109c565b610514565b610313565b90565b5f7f696e76616c696420746f6b656e20706174680000000000000000000000000000910152565b6110ef6012602092610ad7565b6110f8816110bb565b0190565b6111119060208101905f8183039101526110e2565b90565b1561111b57565b611123610132565b7f08c379a000000000000000000000000000000000000000000000000000000000815280611153600482016110fc565b0390fd5b90565b61116e61116961117392611157565b610514565b610313565b90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6111b26111b891939293610313565b92610313565b82039182116111c357565b611176565b5f7f696e76616c696420706f6f6c2070617468000000000000000000000000000000910152565b6111fc6011602092610ad7565b611205816111c8565b0190565b61121e9060208101905f8183039101526111ef565b90565b1561122857565b611230610132565b7f08c379a00000000000000000000000000000000000000000000000000000000081528061126060048201611209565b0390fd5b61127861127361127d92610fe1565b610514565b610251565b90565b61128990611264565b90565b5f7f7a65726f20616464726573730000000000000000000000000000000000000000910152565b6112c0600c602092610ad7565b6112c98161128c565b0190565b6112e29060208101905f8183039101526112b3565b90565b156112ec57565b6112f4610132565b7f08c379a000000000000000000000000000000000000000000000000000000000815280611324600482016112cd565b0390fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9061135f82610b87565b811015611370576020809102010190565b611328565b61137f905161026a565b90565b61138b90610517565b90565b61139790611382565b90565b6113a390610533565b90565b6113af90610533565b90565b60e01b90565b151590565b6113c6816113b8565b036113cd57565b5f80fd5b905051906113de826113bd565b565b906020828203126113f9576113f6915f016113d1565b90565b61013c565b60409061142761142e949695939661141d60608401985f85019061095d565b602083019061095d565b01906103cd565b565b611438610132565b3d5f823e3d90fd5b5f7f616d6f756e744f757420746f6f206c6f77000000000000000000000000000000910152565b6114746011602092610ad7565b61147d81611440565b0190565b6114969060208101905f818303910152611467565b90565b156114a057565b6114a8610132565b7f08c379a0000000000000000000000000000000000000000000000000000000008152806114d860048201611481565b0390fd5b9091949795929396505050611503856114fd6114f75f610fe4565b91610313565b11611059565b61152961150f84610b87565b61152261151c600261109f565b91610313565b1015611114565b61156861153583610b87565b61156261155c61155761154788610b87565b611551600161115a565b906111a3565b610313565b91610313565b14611221565b61158d8161158661158061157b5f611280565b61026a565b9161026a565b14156112e5565b6115b86115b36115ae6115a9866115a35f610fe4565b90611355565b611375565b61138e565b61139a565b9460206323b872dd9633906115e95f6115d0306113a6565b9a6115f4876115dd610132565b9d8e97889687956113b2565b8552600485016113fe565b03925af1938415611661576116339661161695611635575b50929091926130bd565b92909361162c6116268692610313565b91610313565b1015611499565b565b6116559060203d811161165a575b61164d81836101f2565b8101906113e0565b61160c565b503d611643565b611430565b906116859594939291611677610eec565b61167f610eec565b90610f8c565b9091565b906116b798979695949392916116b2896116ab6116a542610313565b91610313565b1015610f49565b6116bb565b9091565b906116d498979695949392916116cf612f58565b611928565b90916116de612fe8565b565b5f1c90565b6116f16116f6916116e0565b6108ae565b90565b61170390546116e5565b90565b9050519061171382610276565b565b9060208282031261172e5761172b915f01611706565b90565b61013c565b61173c90610517565b90565b61174890611733565b90565b5f7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f910152565b61177e60208092610ad7565b6117878161174b565b0190565b6117a09060208101905f818303910152611772565b90565b156117aa57565b6117b2610132565b7f08c379a0000000000000000000000000000000000000000000000000000000008152806117e26004820161178b565b0390fd5b6117ef90610533565b90565b91602061181392949361180c60408201965f83019061095d565b019061095d565b565b60207f666f756e64000000000000000000000000000000000000000000000000000000917f42616c756e695631506f6f6c5065726970686572793a20506f6f6c206e6f74205f8201520152565b61186f6025604092610ad7565b61187881611815565b0190565b6118919060208101905f818303910152611862565b90565b1561189b57565b6118a3610132565b7f08c379a0000000000000000000000000000000000000000000000000000000008152806118d36004820161187c565b0390fd5b906118e96118e483610230565b61021b565b918252565b369037565b90611918611900836118d7565b9260208061190e8693610230565b92019103906118ee565b565b906119249061026a565b9052565b909194969392989750505061195f60206119496119445f6116f9565b6108fa565b6332569e0290611957610132565b9384926113b2565b8252818061196f600482016107f2565b03915afa908115611bb2576119b09161198f915f91611b84575b5061173f565b6119ab836119a561199f5f610fe4565b91610313565b116117a3565b6117e6565b6020632d5e94a79185906119d68b946119e16119ca610132565b968795869485946113b2565b8452600484016117f2565b03915afa908115611b7f575f91611b51575b5092611a1a84611a13611a0d611a085f611280565b61026a565b9161026a565b1415611894565b6020611a2d611a288361138e565b61139a565b6323b872dd9690611a5a5f611a41306113a6565b99611a6588611a4e610132565b9c8d97889687956113b2565b8552600485016113fe565b03925af18015611b4c57611b1c98611aff96611ac892611b20575b50611aaf611a96611a91600261109f565b6118f3565b93611aaa85611aa45f610fe4565b90611355565b61191a565b611ac383611abd600161115a565b90611355565b61191a565b611af6611add611ad8600161115a565b6118f3565b94611af186611aeb5f610fe4565b90611355565b61191a565b929091926130bd565b939091611b15611b0f8492610313565b91610313565b1015611499565b9190565b611b409060203d8111611b45575b611b3881836101f2565b8101906113e0565b611a80565b503d611b2e565b611430565b611b72915060203d8111611b78575b611b6a81836101f2565b810190611715565b5f6119f3565b503d611b60565b611430565b611ba5915060203d8111611bab575b611b9d81836101f2565b810190611715565b5f611989565b503d611b93565b611430565b90611bd7969594939291611bc9610eec565b611bd1610eec565b90611689565b9091565b6001611be79101610313565b90565b611bf390610517565b90565b611bff90611bea565b90565b611c0b90610533565b90565b611c1d611c2391939293610313565b92610313565b8201809211611c2e57565b611176565b90505190611c4082610316565b565b90602082820312611c5b57611c58915f01611c33565b90565b61013c565b611c6990610517565b90565b611c7590611c60565b90565b611c8190610533565b90565b60ff1690565b611c9381611c84565b03611c9a57565b5f80fd5b90505190611cab82611c8a565b565b90602082820312611cc657611cc3915f01611c9e565b90565b61013c565b90565b611ce2611cdd611ce792611ccb565b610514565b611c84565b90565b611cf6611cfc91611c84565b91611c84565b90039060ff8211611d0957565b611176565b611d1790611c84565b604d8111611d2557600a0a90565b611176565b611d39611d3f91939293610313565b92610313565b91611d4b838202610313565b928184041490151715611d5a57565b611176565b9291611d69610eec565b90611d72610eec565b92611d8f82611d89611d835f610fe4565b91610313565b11611059565b611db5611d9b87610b87565b611dae611da8600261109f565b91610313565b1015611114565b611df4611dc182610b87565b611dee611de8611de3611dd38b610b87565b611ddd600161115a565b906111a3565b610313565b91610313565b14611221565b611dfc610eec565b9193611e06610eec565b935b84611e23611e1d611e1886610b87565b610313565b91610313565b10156120125784611e3c611e365f610fe4565b91610313565b03612008575b50611e66611e61611e5c611e57858890611355565b611375565b611bf6565b611c02565b60206343c2e2f591611e81611e7c8b8990611355565b611375565b90611ec4611eab611ea68d611ea08c611e9a600161115a565b90611c0e565b90611355565b611375565b94611ecf8b611eb8610132565b978896879586956113b2565b8552600485016113fe565b03915afa908115612003578891611f3b915f91611fd5575b5092856020611f25611f20611f1b611f168c611f1060129a91611f0a600161115a565b90611c0e565b90611355565b611375565b611c6c565b611c78565b63313ce56790611f33610132565b9586926113b2565b82528180611f4b600482016107f2565b03915afa908115611fd057611f83611f7e611f8993611f9597611f8f975f92611f9c575b50611f7990611cce565b611cea565b611d0e565b90611d2a565b90611c0e565b94611bdb565b9390611e08565b611f79919250611fc29060203d8111611fc9575b611fba81836101f2565b810190611cad565b9190611f6f565b503d611fb0565b611430565b611ff6915060203d8111611ffc575b611fee81836101f2565b810190611c42565b5f611ee7565b503d611fe4565b611430565b909450935f611e42565b945095505050509190565b90612026610eec565b50612053602061203d6120385f6116f9565b6108fa565b6332569e029061204b610132565b9384926113b2565b82528180612063600482016107f2565b03915afa9081156121b85761208891612083915f9161218a575b5061173f565b6117e6565b916020632d5e94a79382906120af85966120ba6120a3610132565b988995869485946113b2565b8452600484016117f2565b03915afa928315612185576120e46120df602095612104935f91612158575b50611bf6565b611c02565b9161210f6343c2e2f59194966120f8610132565b978896879586956113b2565b8552600485016113fe565b03915afa908115612153575f91612125575b5090565b612146915060203d811161214c575b61213e81836101f2565b810190611c42565b5f612121565b503d612134565b611430565b6121789150873d811161217e575b61217081836101f2565b810190611715565b5f6120d9565b503d612166565b611430565b6121ab915060203d81116121b1575b6121a381836101f2565b810190611715565b5f61207d565b503d612199565b611430565b906121cf916121ca613551565b6121d1565b565b906121e4916121df81613623565b613693565b565b906121f0916121bd565b565b5f90565b612207906122026137d1565b61225a565b90565b90565b5f1b90565b61222661222161222b9261220a565b61220d565b610821565b90565b6122577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc612212565b90565b5061226361222e565b90565b6122766122716121f2565b6121f6565b90565b61228161384f565b61228961228b565b565b61229c6122975f611280565b6138e0565b565b6122a6612279565b565b5f90565b73ffffffffffffffffffffffffffffffffffffffff1690565b6122d16122d6916116e0565b6122ac565b90565b6122e390546122c5565b90565b6122ee6122a8565b506123015f6122fb61394c565b016122d9565b90565b60401c90565b60ff1690565b61231c61232191612304565b61230a565b90565b61232e9054612310565b90565b67ffffffffffffffff1690565b61234a61234f916116e0565b612331565b90565b61235c905461233e565b90565b9061237267ffffffffffffffff9161220d565b9181191691161790565b61239061238b6123959261014f565b610514565b61014f565b90565b90565b906123b06123ab6123b79261237c565b612398565b825461235f565b9055565b60401b90565b906123d568ff0000000000000000916123bb565b9181191691161790565b6123e8906113b8565b90565b90565b906124036123fe61240a926123df565b6123eb565b82546123c1565b9055565b908091612419613970565b906124255f8301612324565b80156124d6575b61249a5761245f9261245691612444865f860161239b565b61245160015f86016123ee565b61256b565b5f8091016123ee565b6124957fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29161248c610132565b91829182610169565b0390a1565b6124a2610132565b7ff92ee8a9000000000000000000000000000000000000000000000000000000008152806124d2600482016107f2565b0390fd5b506124e25f8301612352565b6124f46124ee8661014f565b9161014f565b101561242c565b61250490610517565b90565b612510906124fb565b90565b9061253273ffffffffffffffffffffffffffffffffffffffff9161220d565b9181191691161790565b612545906124fb565b90565b90565b9061256061255b6125679261253c565b612548565b8254612513565b9055565b61257f915061257990612507565b5f61254b565b565b9061258b9161240e565b565b606090565b909291926125a76125a282610230565b61021b565b93818552602080860192028301928184116125e457915b8383106125cb5750505050565b602080916125d98486611706565b8152019201916125be565b61024d565b9080601f830112156126075781602061260493519101612592565b90565b6101b7565b9060208282031261263c575f82015167ffffffffffffffff81116126375761263492016125e9565b90565b6101b3565b61013c565b61264961258d565b50612676602061266061265b5f6116f9565b6108fa565b6332569e029061266e610132565b9384926113b2565b82528180612686600482016107f2565b03915afa918215612741576126af6126aa6126d6945f948591612713575b5061173f565b6117e6565b6126cb63b4340e6a6126bf610132565b958694859384936113b2565b83526004830161096a565b03915afa90811561270e575f916126ec575b5090565b61270891503d805f833e61270081836101f2565b81019061260c565b5f6126e8565b611430565b612734915060203d811161273a575b61272c81836101f2565b810190611715565b5f6126a4565b503d612722565b611430565b61275a61275561275f92610fe1565b610514565b61014f565b90565b61277661277161277b92611157565b610514565b61014f565b90565b61278790610533565b90565b61279390612762565b9052565b91906127aa905f6020850194019061278a565b565b6127b4613970565b906127c96127c35f8401612324565b156113b8565b906127d55f8401612352565b806127e86127e25f612746565b9161014f565b1480612922575b906128036127fd6001612762565b9161014f565b14806128fa575b6128159091156113b8565b90816128e9575b506128ad576128459061283a6128326001612762565b5f860161239b565b8261289b575b612929565b61284d575b50565b61285a905f8091016123ee565b60016128927fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d291612889610132565b91829182612797565b0390a15f61284a565b6128a860015f86016123ee565b612840565b6128b5610132565b7ff92ee8a9000000000000000000000000000000000000000000000000000000008152806128e5600482016107f2565b0390fd5b6128f49150156113b8565b5f61281c565b506128156129073061277e565b3b61291a6129145f610fe4565b91610313565b14905061280a565b50826127ef565b61294661294c9161293861399e565b612941336139c6565b612507565b5f61254b565b565b612957906127ac565b565b606090565b5090565b5090565b5f7f496e70757420617272617973206c656e677468206d69736d6174636800000000910152565b61299a601c602092610ad7565b6129a381612966565b0190565b6129bc9060208101905f81830391015261298d565b90565b156129c657565b6129ce610132565b7f08c379a0000000000000000000000000000000000000000000000000000000008152806129fe600482016129a7565b0390fd5b67ffffffffffffffff8111612a1a5760208091020190565b6101c5565b90612a31612a2c83612a02565b61021b565b918252565b369037565b90612a60612a4883612a1f565b92602080612a568693612a02565b9201910390612a36565b565b9190811015612a72576020020190565b611328565b35612a8181610316565b90565b9190811015612a94576020020190565b611328565b35612aa381610276565b90565b5f7f496e73756666696369656e742042616c616e6365000000000000000000000000910152565b612ada6014602092610ad7565b612ae381612aa6565b0190565b612afc9060208101905f818303910152612acd565b90565b15612b0657565b612b0e610132565b7f08c379a000000000000000000000000000000000000000000000000000000000815280612b3e60048201612ae7565b0390fd5b90565b612b59612b54612b5e92612b42565b610514565b610313565b90565b90612b6b82610dbf565b811015612b7c576020809102010190565b611328565b90612b8b90610313565b9052565b9491959397969290612b9f612959565b50612bab86829061295e565b612bc7612bc1612bbc8a869061295e565b610313565b91610313565b1480612dda575b80612da7575b612bdd906129bf565b612bf0612beb87839061295e565b612a3b565b95612bfa5f610fe4565b5b80612c18612c12612c0d85879061295e565b610313565b91610313565b1015612d99578890612c4f612c37612c328e898591612a62565b612a77565b612c49612c435f610fe4565b91610313565b116117a3565b612ce28c612c8f612c8a612c81612c7c612c73612c6e8a8c8a91612a84565b612a99565b978b8891612a84565b612a99565b928a8691612a62565b612a77565b90612ca4612c9f8c8c8791612a84565b612a99565b916020612cb8612cb38861138e565b61139a565b6370a0823190612cd73392612ccb610132565b988994859384936113b2565b83526004830161096a565b03915afa928315612d9457612d6196612d1d612d4995612d5c975f91612d66575b50612d16612d1086610313565b91610313565b1015612aff565b9291925f93339293612d43612d3d42612d3761012c612b45565b90611c0e565b96610fe4565b92611bb7565b50612d578b91849092612b61565b612b81565b611bdb565b612bfb565b612d87915060203d8111612d8d575b612d7f81836101f2565b810190611c42565b5f612d03565b503d612d75565b611430565b505050505050509192505090565b50612bdd612db68a8590612962565b612dd2612dcc612dc789899061295e565b610313565b91610313565b149050612bd4565b50612de687839061295e565b612e02612dfc612df78c8790612962565b610313565b91610313565b14612bce565b612e1990612e1461384f565b612e1b565b565b80612e36612e30612e2b5f611280565b61026a565b9161026a565b14612e4657612e44906138e0565b565b612e89612e525f611280565b612e5a610132565b9182917f1e4fbdf70000000000000000000000000000000000000000000000000000000083526004830161096a565b0390fd5b612e9690612e08565b565b612ea0610ed4565b50612eb35f612ead613970565b01612352565b90565b612ec2612ec7916116e0565b61057b565b90565b612ed49054612eb6565b90565b612ee1600261109f565b90565b90612f0f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9161220d565b9181191691161790565b612f2d612f28612f3292610313565b610514565b610313565b90565b90565b90612f4d612f48612f5492612f19565b612f35565b8254612ee4565b9055565b612f606139d1565b612f6b5f8201612eca565b612f84612f7e612f79612ed7565b610313565b91610313565b14612f9f57612f9d905f612f96612ed7565b9101612f38565b565b612fa7610132565b7f3ee5aeb500000000000000000000000000000000000000000000000000000000815280612fd7600482016107f2565b0390fd5b612fe5600161115a565b90565b613003612ff36139d1565b5f612ffc612fdb565b9101612f38565b565b91602061302692949361301f60408201965f83019061095d565b01906103cd565b565b9190604083820312613050578061304461304d925f8601611c33565b93602001611c33565b90565b61013c565b61305e90610fe4565b9052565b91946130aa6130b4929897956130a060a0966130966130bb9a61308c60c08a019e5f8b019061095d565b602089019061095d565b60408701906103cd565b6060850190613055565b608083019061095d565b01906103cd565b565b9392906130c8610eec565b916130d1610eec565b936130da610eec565b50936130e46122a8565b506130ed610eec565b935b8461310a6131046130ff87610b87565b610313565b91610313565b101561353b578461312361311d5f610fe4565b91610313565b1480613518575b5f146134a25750815b61315661315161314c6131478b8990611355565b611375565b61138e565b61139a565b602063dd62ed3e91613167306113a6565b9061319661317e6131798a8c90611355565b611375565b946131a161318a610132565b968795869485946113b2565b8452600484016117f2565b03915afa90811561349d575f9161346f575b506131c76131c18892610313565b91610313565b10156133c2575b6040886131f46131ef6131ea6131e5898b90611355565b611375565b611bf6565b611c02565b6132745f639908fc8b61327f61323a6132358d61322f61321d6132188b8490611355565b611375565b9991613229600161115a565b90611c0e565b90611355565b611375565b978d90847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92613268610132565b9b8c9a8b998a986113b2565b885260048801613062565b03925af19182156133bd5788915f80919094613387575b50906132ed9160206132d76132d26132cd6132c88c6132c260129a916132bc600161115a565b90611c0e565b90611355565b611375565b611c6c565b611c78565b63313ce567906132e5610132565b9586926113b2565b825281806132fd600482016107f2565b03915afa9081156133825761333561333061333b9361334797613341975f9261334e575b5061332b90611cce565b611cea565b611d0e565b90611d2a565b90611c0e565b94611bdb565b93906130ef565b61332b9192506133749060203d811161337b575b61336c81836101f2565b810190611cad565b9190613321565b503d613362565b611430565b6132ed9294506133ae915060403d81116133b6575b6133a681836101f2565b810190613028565b909391613296565b503d61339c565b611430565b6133e56133e06133db6133d68b8990611355565b611375565b61138e565b61139a565b602063095ea7b3916134006133fb888a90611355565b611375565b9061341e5f8b95613429613412610132565b978896879586946113b2565b845260048401613005565b03925af1801561346a5761343e575b506131ce565b61345e9060203d8111613463575b61345681836101f2565b8101906113e0565b613438565b503d61344c565b611430565b613490915060203d8111613496575b61348881836101f2565b810190611c42565b5f6131b3565b503d61347e565b611430565b846134b56134af5f610fe4565b91610313565b145f146134cc57506134c6306113a6565b5b613133565b9450836134fc6134f66134f16134e187610b87565b6134eb600161115a565b906111a3565b610313565b91610313565b105f146135125761350c306113a6565b5b6134c7565b8161350d565b5061352284610b87565b61353561352f600161115a565b91610313565b1461312a565b9650949350505050565b61354e90610533565b90565b61355a30613545565b61358c6135867f000000000000000000000000000000000000000000000000000000000000000061026a565b9161026a565b1480156135d6575b61359a57565b6135a2610132565b7fe07c8dba000000000000000000000000000000000000000000000000000000008152806135d2600482016107f2565b0390fd5b506135df6139f5565b61361161360b7f000000000000000000000000000000000000000000000000000000000000000061026a565b9161026a565b1415613594565b5061362161384f565b565b61362c90613618565b565b61363790610517565b90565b6136439061362e565b90565b61364f90610533565b90565b61365b81610821565b0361366257565b5f80fd5b9050519061367382613652565b565b9060208282031261368e5761368b915f01613666565b90565b61013c565b91906136c160206136ab6136a68661363a565b613646565b6352d1902d906136b9610132565b9384926113b2565b825281806136d1600482016107f2565b03915afa80915f926137a1575b50155f146137325750509060016136f357505b565b61372e906136ff610132565b9182917f4c9c8ce30000000000000000000000000000000000000000000000000000000083526004830161096a565b0390fd5b928361374d61374761374261222e565b610821565b91610821565b036137625761375d929350613a1f565b6136f1565b61379d8461376e610132565b9182917faa1d49a400000000000000000000000000000000000000000000000000000000835260048301610831565b0390fd5b6137c391925060203d81116137ca575b6137bb81836101f2565b810190613675565b905f6136de565b503d6137b1565b6137da30613545565b61380c6138067f000000000000000000000000000000000000000000000000000000000000000061026a565b9161026a565b0361381357565b61381b610132565b7fe07c8dba0000000000000000000000000000000000000000000000000000000081528061384b600482016107f2565b0390fd5b6138576122e6565b61387061386a613865613aa8565b61026a565b9161026a565b0361387757565b6138b9613882613aa8565b61388a610132565b9182917f118cdaa70000000000000000000000000000000000000000000000000000000083526004830161096a565b0390fd5b90565b906138d56138d06138dc9261053f565b6138bd565b8254612513565b9055565b6138e861394c565b6139006138f65f83016122d9565b915f8491016138c0565b9061393461392e7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09361053f565b9161053f565b9161393d610132565b80613947816107f2565b0390a3565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b61399c613ab5565b565b6139a6613994565b565b6139b9906139b4613ab5565b6139bb565b565b6139c490613b8d565b565b6139cf906139a8565b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b6139fd6122a8565b50613a185f613a12613a0d61222e565b613b98565b016122d9565b90565b5190565b90613a2982613b9b565b81613a547fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9161053f565b90613a5d610132565b80613a67816107f2565b0390a2613a7381613a1b565b613a85613a7f5f610fe4565b91610313565b115f14613a9957613a9591613cab565b505b565b5050613aa3613c10565b613a97565b613ab06122a8565b503390565b613ac6613ac0613cde565b156113b8565b613acc57565b613ad4610132565b7fd7e6bcf800000000000000000000000000000000000000000000000000000000815280613b04600482016107f2565b0390fd5b613b1990613b14613ab5565b613b1b565b565b80613b36613b30613b2b5f611280565b61026a565b9161026a565b14613b4657613b44906138e0565b565b613b89613b525f611280565b613b5a610132565b9182917f1e4fbdf70000000000000000000000000000000000000000000000000000000083526004830161096a565b0390fd5b613b9690613b08565b565b90565b803b613baf613ba95f610fe4565b91610313565b14613bd157613bcf905f613bc9613bc461222e565b613b98565b016138c0565b565b613c0c90613bdd610132565b9182917f4c9c8ce30000000000000000000000000000000000000000000000000000000083526004830161096a565b0390fd5b34613c23613c1d5f610fe4565b91610313565b11613c2a57565b613c32610132565b7fb398979f00000000000000000000000000000000000000000000000000000000815280613c62600482016107f2565b0390fd5b606090565b90613c7d613c7883610726565b61021b565b918252565b3d5f14613c9d57613c923d613c6b565b903d5f602084013e5b565b613ca5613c66565b90613c9b565b5f80613cd793613cb9613c66565b508390602081019051915af490613cce613c82565b90919091613cfc565b90565b5f90565b613ce6613cda565b50613cf95f613cf3613970565b01612324565b90565b90613d1090613d09613c66565b50156113b8565b5f14613d1c5750613da0565b613d2582613a1b565b613d37613d315f610fe4565b91610313565b1480613d85575b613d46575090565b613d8190613d52610132565b9182917f9996b3150000000000000000000000000000000000000000000000000000000083526004830161096a565b0390fd5b50803b613d9a613d945f610fe4565b91610313565b14613d3e565b613da981613a1b565b613dbb613db55f610fe4565b91610313565b115f14613dca57805190602001fd5b613dd2610132565b7f1425ea4200000000000000000000000000000000000000000000000000000000815280613e02600482016107f2565b0390fdfea264697066735822122011669f6e7c9fc6c69c7c277d31e871e1a8fd5eff3936ba41f92fe09eef77345d64736f6c63430008190033", "deployedBytecode": "0x60806040526004361015610013575b610ed0565b61001d5f3561012c565b80630d8e6e2c1461012757806321579b791461012257806335823d761461011d5780634056c37f146101185780634209bed0146101135780634aa066521461010e5780634f1ef2861461010957806352d1902d14610104578063715018a6146100ff5780637b103999146100fa5780638da5cb5b146100f55780638f2248bc146100f0578063ad3cb1cc146100eb578063ae3cce1c146100e6578063c4d66de8146100e1578063e74e9b06146100dc5763f2fde38b0361000e57610e9d565b610e5e565b610c5b565b610c26565b610b34565b610a04565b61097f565b610928565b61087b565b610846565b6107f7565b6106ec565b61067b565b6105da565b6104aa565b6103fd565b61017e565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f91031261014a57565b61013c565b67ffffffffffffffff1690565b6101659061014f565b9052565b919061017c905f6020850194019061015c565b565b346101ae5761018e366004610140565b6101aa610199610ed8565b6101a1610132565b91829182610169565b0390f35b610138565b5f80fd5b5f80fd5b601f801991011690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b906101fc906101bb565b810190811067ffffffffffffffff82111761021657604052565b6101c5565b9061022e610227610132565b92836101f2565b565b67ffffffffffffffff81116102485760208091020190565b6101c5565b5f80fd5b73ffffffffffffffffffffffffffffffffffffffff1690565b61027390610251565b90565b61027f8161026a565b0361028657565b5f80fd5b9050359061029782610276565b565b909291926102ae6102a982610230565b61021b565b93818552602080860192028301928184116102eb57915b8383106102d25750505050565b602080916102e0848661028a565b8152019201916102c5565b61024d565b9080601f8301121561030e5781602061030b93359101610299565b90565b6101b7565b90565b61031f81610313565b0361032657565b5f80fd5b9050359061033782610316565b565b909160c0828403126103c8575f82013567ffffffffffffffff81116103c357836103649184016102f0565b92602083013567ffffffffffffffff81116103be57816103859185016102f0565b92610393826040830161032a565b926103bb6103a4846060850161032a565b936103b2816080860161028a565b9360a00161032a565b90565b6101b3565b6101b3565b61013c565b6103d690610313565b9052565b9160206103fb9294936103f460408201965f8301906103cd565b01906103cd565b565b346104355761041c610410366004610339565b94939093929192611666565b90610431610428610132565b928392836103da565b0390f35b610138565b60e0818303126104a557610450825f830161028a565b9261045e836020840161028a565b9261046c816040850161032a565b9261047a826060830161032a565b926104a261048b846080850161028a565b936104998160a0860161028a565b9360c00161032a565b90565b61013c565b346104e2576104c96104bd36600461043a565b95949094939193611bb7565b906104de6104d5610132565b928392836103da565b0390f35b610138565b919060408382031261050f578061050361050c925f860161028a565b9360200161028a565b90565b61013c565b90565b61052b61052661053092610251565b610514565b610251565b90565b61053c90610517565b90565b61054890610533565b90565b906105559061053f565b5f5260205260405f2090565b9061056b9061053f565b5f5260205260405f2090565b1c90565b90565b61058e9060086105939302610577565b61057b565b90565b906105a1915461057e565b90565b6105bd6105c2926105b86001935f9461054b565b610561565b610596565b90565b91906105d8905f602085019401906103cd565b565b3461060b576106076105f66105f03660046104e7565b906105a4565b6105fe610132565b918291826105c5565b0390f35b610138565b9091606082840312610676575f82013567ffffffffffffffff8111610671578361063b9184016102f0565b9260208301359067ffffffffffffffff821161066c57610660816106699386016102f0565b9360400161032a565b90565b6101b3565b6101b3565b61013c565b346106ad5761069461068e366004610610565b91611d5f565b906106a96106a0610132565b928392836103da565b0390f35b610138565b90916060828403126106e7576106e46106cd845f850161028a565b936106db816020860161028a565b9360400161032a565b90565b61013c565b3461071d576107196107086107023660046106b2565b9161201d565b610710610132565b918291826105c5565b0390f35b610138565b5f80fd5b67ffffffffffffffff8111610744576107406020916101bb565b0190565b6101c5565b90825f939282370152565b9092919261076961076482610726565b61021b565b938185526020850190828401116107855761078392610749565b565b610722565b9080601f830112156107a8578160206107a593359101610754565b90565b6101b7565b9190916040818403126107ed576107c6835f830161028a565b92602082013567ffffffffffffffff81116107e8576107e5920161078a565b90565b6101b3565b61013c565b5f0190565b61080b6108053660046107ad565b906121e6565b610813610132565b8061081d816107f2565b0390f35b90565b61082d90610821565b9052565b9190610844905f60208501940190610824565b565b3461087657610856366004610140565b610872610861612266565b610869610132565b91829182610831565b0390f35b610138565b346108a95761088b366004610140565b61089361229e565b61089b610132565b806108a5816107f2565b0390f35b610138565b73ffffffffffffffffffffffffffffffffffffffff1690565b6108d79060086108dc9302610577565b6108ae565b90565b906108ea91546108c7565b90565b6108f75f806108df565b90565b61090390610533565b90565b61090f906108fa565b9052565b9190610926905f60208501940190610906565b565b3461095857610938366004610140565b6109546109436108ed565b61094b610132565b91829182610913565b0390f35b610138565b6109669061026a565b9052565b919061097d905f6020850194019061095d565b565b346109af5761098f366004610140565b6109ab61099a6122e6565b6109a2610132565b9182918261096a565b0390f35b610138565b6109bd8161014f565b036109c457565b5f80fd5b905035906109d5826109b4565b565b91906040838203126109ff57806109f36109fc925f860161028a565b936020016109c8565b90565b61013c565b34610a3357610a1d610a173660046109d7565b90612581565b610a25610132565b80610a2f816107f2565b0390f35b610138565b67ffffffffffffffff8111610a5657610a526020916101bb565b0190565b6101c5565b90610a6d610a6883610a38565b61021b565b918252565b5f7f352e302e30000000000000000000000000000000000000000000000000000000910152565b610aa36005610a5b565b90610ab060208301610a72565b565b610aba610a99565b90565b610ac5610ab2565b90565b610ad0610abd565b90565b5190565b60209181520190565b90825f9392825e0152565b610b0a610b13602093610b1893610b0181610ad3565b93848093610ad7565b95869101610ae0565b6101bb565b0190565b610b319160208201915f818403910152610aeb565b90565b34610b6457610b44366004610140565b610b60610b4f610ac8565b610b57610132565b91829182610b1c565b0390f35b610138565b90602082820312610b8257610b7f915f0161028a565b90565b61013c565b5190565b60209181520190565b60200190565b610ba39061026a565b9052565b90610bb481602093610b9a565b0190565b60200190565b90610bdb610bd5610bce84610b87565b8093610b8b565b92610b94565b905f5b818110610beb5750505090565b909192610c04610bfe6001928651610ba7565b94610bb8565b9101919091610bde565b610c239160208201915f818403910152610bbe565b90565b34610c5657610c52610c41610c3c366004610b69565b612641565b610c49610132565b91829182610c0e565b0390f35b610138565b34610c8957610c73610c6e366004610b69565b61294e565b610c7b610132565b80610c85816107f2565b0390f35b610138565b5f80fd5b909182601f83011215610ccc5781359167ffffffffffffffff8311610cc7576020019260208302840111610cc257565b61024d565b610c8e565b6101b7565b909182601f83011215610d0b5781359167ffffffffffffffff8311610d06576020019260208302840111610d0157565b61024d565b610c8e565b6101b7565b9091608082840312610dba575f82013567ffffffffffffffff8111610db55783610d3b918401610c92565b929093602082013567ffffffffffffffff8111610db05781610d5e918401610c92565b929093604082013567ffffffffffffffff8111610dab5783610d81918401610cd1565b929093606082013567ffffffffffffffff8111610da6576