[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "increaseShares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalShares", "type": "uint256" } ], "name": "BuyShares", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "borrower", "type": "address" }, { "indexed": false, "internalType": "address", "name": "assetTo", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "baseAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "quoteAmount", "type": "uint256" } ], "name": "DODOFlashLoan", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "fromToken", "type": "address" }, { "indexed": false, "internalType": "address", "name": "toToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "fromAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "trader", "type": "address" }, { "indexed": false, "internalType": "address", "name": "receiver", "type": "address" } ], "name": "DODOSwap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum PMMPricing.RState", "name": "newRState", "type": "uint8" } ], "name": "RChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "decreaseShares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalShares", "type": "uint256" } ], "name": "SellShares", "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": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_PRICE_CUMULATIVE_LAST_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_RESERVE_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_TARGET_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BASE_TOKEN_", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_BLOCK_TIMESTAMP_LAST_", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_IS_OPEN_TWAP_", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_I_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_K_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_LP_FEE_RATE_", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MAINTAINER_", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_MT_FEE_RATE_MODEL_", "outputs": [ { "internalType": "contract IFeeRateModel", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_QUOTE_RESERVE_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_QUOTE_TARGET_", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_QUOTE_TOKEN_", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_RState_", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_addr", "type": "address" } ], "name": "addressToShortString", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "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": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "buyShares", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "baseInput", "type": "uint256" }, { "internalType": "uint256", "name": "quoteInput", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "correctRState", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "baseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "quoteAmount", "type": "uint256" }, { "internalType": "address", "name": "assetTo", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flashLoan", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getBaseInput", "outputs": [ { "internalType": "uint256", "name": "input", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMidPrice", "outputs": [ { "internalType": "uint256", "name": "midPrice", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPMMState", "outputs": [ { "components": [ { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "K", "type": "uint256" }, { "internalType": "uint256", "name": "B", "type": "uint256" }, { "internalType": "uint256", "name": "Q", "type": "uint256" }, { "internalType": "uint256", "name": "B0", "type": "uint256" }, { "internalType": "uint256", "name": "Q0", "type": "uint256" }, { "internalType": "enum PMMPricing.RState", "name": "R", "type": "uint8" } ], "internalType": "struct PMMPricing.PMMState", "name": "state", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPMMStateForCall", "outputs": [ { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "K", "type": "uint256" }, { "internalType": "uint256", "name": "B", "type": "uint256" }, { "internalType": "uint256", "name": "Q", "type": "uint256" }, { "internalType": "uint256", "name": "B0", "type": "uint256" }, { "internalType": "uint256", "name": "Q0", "type": "uint256" }, { "internalType": "uint256", "name": "R", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getQuoteInput", "outputs": [ { "internalType": "uint256", "name": "input", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getUserFeeRate", "outputs": [ { "internalType": "uint256", "name": "lpFeeRate", "type": "uint256" }, { "internalType": "uint256", "name": "mtFeeRate", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVaultReserve", "outputs": [ { "internalType": "uint256", "name": "baseReserve", "type": "uint256" }, { "internalType": "uint256", "name": "quoteReserve", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "maintainer", "type": "address" }, { "internalType": "address", "name": "baseTokenAddress", "type": "address" }, { "internalType": "address", "name": "quoteTokenAddress", "type": "address" }, { "internalType": "uint256", "name": "lpFeeRate", "type": "uint256" }, { "internalType": "address", "name": "mtFeeRateModel", "type": "address" }, { "internalType": "uint256", "name": "i", "type": "uint256" }, { "internalType": "uint256", "name": "k", "type": "uint256" }, { "internalType": "bool", "name": "isOpenTWAP", "type": "bool" } ], "name": "init", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "uint256", "name": "payBaseAmount", "type": "uint256" } ], "name": "querySellBase", "outputs": [ { "internalType": "uint256", "name": "receiveQuoteAmount", "type": "uint256" }, { "internalType": "uint256", "name": "mtFee", "type": "uint256" }, { "internalType": "enum PMMPricing.RState", "name": "newRState", "type": "uint8" }, { "internalType": "uint256", "name": "newBaseTarget", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "trader", "type": "address" }, { "internalType": "uint256", "name": "payQuoteAmount", "type": "uint256" } ], "name": "querySellQuote", "outputs": [ { "internalType": "uint256", "name": "receiveBaseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "mtFee", "type": "uint256" }, { "internalType": "enum PMMPricing.RState", "name": "newRState", "type": "uint8" }, { "internalType": "uint256", "name": "newQuoteTarget", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "sellBase", "outputs": [ { "internalType": "uint256", "name": "receiveQuoteAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "sellQuote", "outputs": [ { "internalType": "uint256", "name": "receiveBaseAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareAmount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "baseMinAmount", "type": "uint256" }, { "internalType": "uint256", "name": "quoteMinAmount", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "sellShares", "outputs": [ { "internalType": "uint256", "name": "baseAmount", "type": "uint256" }, { "internalType": "uint256", "name": "quoteAmount", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "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": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" } ]
60806040526000805462ff00001916905534801561001c57600080fd5b506147d98061002c6000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c80637d72150411610167578063d4b97046116100ce578063ee27c68911610087578063ee27c6891461053d578063f6b06e7014610545578063f811d6921461054d578063fd1ed7e914610555578063fe24cb7f14610570578063fff6cae91461057857610295565b8063d4b97046146104ec578063d505accf146104f4578063dd62ed3e14610507578063dd93f59a1461051a578063e539ef491461052d578063ec2fd46d1461053557610295565b8063ab44a7a311610120578063ab44a7a31461049b578063b56ceaa6146104a3578063bbf5ce78146104b6578063bd6015b4146104be578063bf357dae146104d1578063d0a494e4146104d957610295565b80637d7215041461043b5780637ecebe0014610443578063880a4d871461045657806395d89b411461046b578063a382d1b914610473578063a9059cbb1461048857610295565b8063440966091161020b57806366410a21116101c457806366410a21146103cd57806370a08231146103f057806371f9100c1461040357806373d74cf81461040b57806377f586571461041357806379a048761461042857610295565b8063440966091461036b5780634a248d2a1461037e5780634c85b425146103865780635039972a146103a857806354fd4d50146103bd57806365f6fcbb146103c557610295565b80632df6cb481161025d5780632df6cb481461031357806330adf81f1461031b578063313ce5671461032357806336223ce9146103385780633644e5151461034e5780634322ec831461035657610295565b806306fdde031461029a578063095ea7b3146102b857806317101940146102d857806318160ddd146102eb57806323b872dd14610300575b600080fd5b6102a2610580565b6040516102af9190614174565b60405180910390f35b6102cb6102c6366004613d34565b61060e565b6040516102af91906140cf565b6102a26102e6366004613bae565b610625565b6102f361074f565b6040516102af91906140da565b6102cb61030e366004613c86565b610755565b6102cb6108d9565b6102f36108e8565b61032b61090c565b6040516102af91906146cd565b610340610915565b6040516102af92919061463e565b6102f3610930565b61035e610936565b6040516102af9190613fa5565b610340610379366004613bae565b61094c565b61035e6109d7565b610399610394366004613bae565b6109e6565b6040516102af93929190614676565b6103bb6103b6366004613bfd565b610dd0565b005b6102a261110d565b6102f3611131565b6103e06103db366004613d34565b6111d8565b6040516102af949392919061464c565b6102f36103fe366004613bae565b6112c6565b6102f36112e1565b6103bb61132d565b61041b61142a565b6040516102af919061462a565b6103e0610436366004613d34565b611440565b61041b611521565b6102f3610451366004613bae565b611530565b61045e611542565b6040516102af91906146bc565b6102a2611555565b61047b6115b0565b6040516102af91906145d1565b6102cb610496366004613d34565b61163d565b6102f361170c565b6103406104b1366004613d92565b611712565b61041b611b39565b6102f36104cc366004613bae565b611b4f565b61045e611e00565b6103bb6104e7366004613e0c565b611e13565b61035e612400565b6103bb610502366004613cc6565b61240f565b6102f3610515366004613bc9565b61257e565b6102f3610528366004613bae565b6125a9565b61041b612844565b6102f3612853565b6102f3612859565b61035e61286b565b6102f361287a565b61055d612880565b6040516102af979695949392919061468c565b6102f36128e3565b6103bb6128e9565b6008805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106065780601f106105db57610100808354040283529160200191610606565b820191906000526020600020905b8154815290600101906020018083116105e957829003601f168201915b505050505081565b600061061b33848461292d565b5060015b92915050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160088082528184019093526060926001600160a01b0385169291849160208201818036833701905050905060005b6004811015610744578260048583600c016020811061069657fe5b1a60f81b6001600160f81b031916901c60f81c60ff16815181106106b657fe5b602001015160f81c60f81b8282600202815181106106d057fe5b60200101906001600160f81b031916908160001a905350828482600c01602081106106f757fe5b825191901a600f1690811061070857fe5b602001015160f81c60f81b82826002026001018151811061072557fe5b60200101906001600160f81b031916908160001a90535060010161067b565b50925050505b919050565b60095481565b6001600160a01b0383166000908152600a60205260408120548211156107965760405162461bcd60e51b815260040161078d9061449f565b60405180910390fd5b6001600160a01b0384166000908152600b602090815260408083203384529091529020548211156107d95760405162461bcd60e51b815260040161078d9061422b565b6001600160a01b0384166000908152600a6020526040902054610802908363ffffffff61299516565b6001600160a01b038086166000908152600a60205260408082209390935590851681522054610837908363ffffffff6129bd16565b6001600160a01b038085166000908152600a60209081526040808320949094559187168152600b8252828120338252909152205461087b908363ffffffff61299516565b6001600160a01b038086166000818152600b60209081526040808320338452909152908190209390935591519085169190600080516020614744833981519152906108c79086906140da565b60405180910390a35060019392505050565b60005462010000900460ff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60075460ff1681565b6003546001600160701b0380821692600160701b9092041690565b600c5481565b600054630100000090046001600160a01b031681565b600f54600e54604051638198edbf60e01b81526000916001600160a01b031690638198edbf90610980908690600401613fa5565b60206040518083038186803b15801561099857600080fd5b505afa1580156109ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d09190613d7a565b9050915091565b6001546001600160a01b031681565b600080548190819060ff1615610a0e5760405162461bcd60e51b815260040161078d906142b8565b6000805460ff191660019081178255546040516370a0823160e01b81526001600160a01b03909116906370a0823190610a4b903090600401613fa5565b60206040518083038186803b158015610a6357600080fd5b505afa158015610a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9b9190613d7a565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190610ad1903090600401613fa5565b60206040518083038186803b158015610ae957600080fd5b505afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190613d7a565b6003549091506001600160701b0380821691600160701b900416610b4b848363ffffffff61299516565b9550610b5d838263ffffffff61299516565b945060008611610b7f5760405162461bcd60e51b815260040161078d906143a1565b600954610c565760008311610ba65760405162461bcd60e51b815260040161078d9061430a565b610bb2846011546129e9565b8310610bbe5783610bca565b610bca83601154612a13565b600580546001600160701b0319166001600160701b038316179055601154909750610bf69088906129e9565b6005600e6101000a8154816001600160701b0302191690836001600160701b031602179055506107d18711610c3d5760405162461bcd60e51b815260040161078d906141fb565b610c4a60006103e9612a31565b6103e987039650610d52565b600082118015610c665750600081115b15610d52576000610c778784612a13565b90506000610c858784612a13565b90506000828210610c965782610c98565b815b9050610ca6600954826129e9565b600554909a50610cdb90610cc3906001600160701b0316836129e9565b6005546001600160701b03169063ffffffff6129bd16565b600580546001600160701b0319166001600160701b039283161790819055610d2891610d0f91600160701b900416836129e9565b600554600160701b90046001600160701b0316906129bd565b6005600e6101000a8154816001600160701b0302191690836001600160701b031602179055505050505b610d5c8888612a31565b610d668484612b2b565b6001600160a01b0388166000908152600a6020526040908190205490517f1c172440bdebb59cd92a7f08f4227903a3305ab6f880cb25f93eddb66843a10291610db2918b918b916140ae565b60405180910390a150506000805460ff191690555092949193509150565b600054610100900460ff1615610df85760405162461bcd60e51b815260040161078d906141a7565b6000805461ff0019166101001790556001600160a01b038781169087161415610e335760405162461bcd60e51b815260040161078d90614335565b600180546001600160a01b03808a166001600160a01b03199283161790925560028054928916929091169190911790558215801590610e8157506ec097ce7bc90715b34b9f10000000008311155b610e8a57600080fd5b6011839055670de0b6b3a7640000821115610ea457600080fd5b6010829055600f859055600e80546001600160a01b038087166001600160a01b0319909216919091179091556000805483158015620100000262ff000019948d166301000000026301000000600160b81b03199093169290921793909316179055610f2757600380546001600160e01b03164263ffffffff16600160e01b021790555b60408051808201825260018152605f60f81b602080830191909152825180840190935260038352620444c560ec1b90830152908082610f6530610625565b604051602001610f7793929190613f45565b60405160208183030381529060405260089080519060200190610f9b929190613a78565b50604080518082019091526003808252620444c560ec1b6020909201918252610fc691600691613a78565b50600160009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561101557600080fd5b505afa158015611029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d9190613e73565b6007805460ff191660ff9290921691909117905560405146907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9061109490600890613ed5565b60408051918290038220828201825260018352603160f81b60209384015290516110e593927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6918691309101614148565b60408051601f198184030181529190528051602090910120600c555050505050505050505050565b60408051808201909152600981526844535020312e302e3160b81b60208201525b90565b6003546001546040516370a0823160e01b81526000926111d3926001600160701b03909116916001600160a01b03909116906370a0823190611177903090600401613fa5565b60206040518083038186803b15801561118f57600080fd5b505afa1580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c79190613d7a565b9063ffffffff61299516565b905090565b6000806000806111e6613af6565b6111ee6115b0565b90506111fa8187612bbb565b600f54600e54604051638198edbf60e01b8152939850919550916000916001600160a01b031690638198edbf90611235908c90600401613fa5565b60206040518083038186803b15801561124d57600080fd5b505afa158015611261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112859190613d7a565b905061129187826129e9565b95506112b1866111c76112a48a866129e9565b8a9063ffffffff61299516565b96508260a00151935050505092959194509250565b6001600160a01b03166000908152600a602052604090205490565b6003546002546040516370a0823160e01b81526000926111d392600160701b9091046001600160701b0316916001600160a01b03909116906370a0823190611177903090600401613fa5565b60055463ffffffff600160e01b90910416600214801561135d57506005546003546001600160701b039182169116105b156113a557600580546003546001600160701b03808216600160701b600160e01b0390931692909217600160701b600160e01b031916600160701b9182900492909216021790555b60055463ffffffff600160e01b9091041660011480156113e057506005546003546001600160701b03600160701b9283900481169290910416105b1561142857600580546003546001600160701b03808216600160701b600160e01b0390931692909217600160701b600160e01b031916600160701b9182900492909216021790555b565b600554600160701b90046001600160701b031681565b60008060008061144e613af6565b6114566115b0565b90506114628187612cc1565b600f54600e54604051638198edbf60e01b8152939850919550916000916001600160a01b031690638198edbf9061149d908c90600401613fa5565b60206040518083038186803b1580156114b557600080fd5b505afa1580156114c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ed9190613d7a565b90506114f987826129e9565b955061150c866111c76112a48a866129e9565b96508260800151935050505092959194509250565b6003546001600160701b031681565b600d6020526000908152604090205481565b600354600160e01b900463ffffffff1681565b6006805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106065780601f106105db57610100808354040283529160200191610606565b6115b8613af6565b601154815260105460208201526003546001600160701b038082166040840152600160701b918290048116606084015260055480821660808501529182041660a0830152600160e01b900463ffffffff16600281111561161457fe5b8160c00190600281111561162457fe5b9081600281111561163157fe5b90525061112e81612dc2565b336000908152600a602052604081205482111561166c5760405162461bcd60e51b815260040161078d9061449f565b336000908152600a602052604090205461168c908363ffffffff61299516565b336000908152600a6020526040808220929092556001600160a01b038516815220546116be908363ffffffff6129bd16565b6001600160a01b0384166000818152600a6020526040908190209290925590513390600080516020614744833981519152906116fb9086906140da565b60405180910390a350600192915050565b600f5481565b60008054819060ff16156117385760405162461bcd60e51b815260040161078d906142b8565b6000805460ff19166001179055428310156117655760405162461bcd60e51b815260040161078d90614588565b336000908152600a60205260409020548911156117945760405162461bcd60e51b815260040161078d90614477565b6001600160a01b0388163014156117bd5760405162461bcd60e51b815260040161078d906142db565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a08231906117ee903090600401613fa5565b60206040518083038186803b15801561180657600080fd5b505afa15801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e9190613d7a565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611874903090600401613fa5565b60206040518083038186803b15801561188c57600080fd5b505afa1580156118a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c49190613d7a565b6009549091506118ea816118de858f63ffffffff612e6c16565b9063ffffffff612ea616565b9450611900816118de848f63ffffffff612e6c16565b935061195e6119468261193a8f600560009054906101000a90046001600160701b03166001600160701b0316612e6c90919063ffffffff16565b9063ffffffff612ed016565b6005546001600160701b03169063ffffffff61299516565b600560006101000a8154816001600160701b0302191690836001600160701b031602179055506119d56119bc8261193a8f6005600e9054906101000a90046001600160701b03166001600160701b0316612e6c90919063ffffffff16565b600554600160701b90046001600160701b031690612995565b6005600e6101000a8154816001600160701b0302191690836001600160701b03160217905550898510158015611a0b5750888410155b611a275760405162461bcd60e51b815260040161078d9061444a565b611a31338d612efd565b611a3b8b86612fca565b611a458b85612fed565b611a4d613010565b8615611abc578a6001600160a01b0316632411d338338e88888d8d6040518763ffffffff1660e01b8152600401611a899695949392919061401b565b600060405180830381600087803b158015611aa357600080fd5b505af1158015611ab7573d6000803e3d6000fd5b505050505b7f55caccde83781f39bfc1296eff45655b6496729443a7d48958b18b3b685600a5338c8e600a6000336001600160a01b03166001600160a01b0316815260200190815260200160002054604051611b169493929190613fb9565b60405180910390a150506000805460ff1916905550909890975095505050505050565b600354600160701b90046001600160701b031681565b6000805460ff1615611b735760405162461bcd60e51b815260040161078d906142b8565b6000805460ff191660019081178255546040516370a0823160e01b81526001600160a01b03909116906370a0823190611bb0903090600401613fa5565b60206040518083038186803b158015611bc857600080fd5b505afa158015611bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c009190613d7a565b600354909150600090611c239083906001600160701b031663ffffffff61299516565b90506000806000611c343285611440565b9298509094509092509050611c498787612fed565b600054611c6690630100000090046001600160a01b031684612fed565b806002811115611c7257fe5b600554600160e01b900463ffffffff908116911614611d1f576001600160701b03821115611cb25760405162461bcd60e51b815260040161078d906144cb565b600580546001600160701b0319166001600160701b038416179055806002811115611cd957fe5b6005601c6101000a81548163ffffffff021916908363ffffffff16021790555060008051602061476483398151915281604051611d169190614135565b60405180910390a15b6002546040516370a0823160e01b8152611daa9187916001600160a01b03909116906370a0823190611d55903090600401613fa5565b60206040518083038186803b158015611d6d57600080fd5b505afa158015611d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da59190613d7a565b612b2b565b60015460025460405160008051602061478483398151915292611de3926001600160a01b039182169291169088908b9033908e9061405b565b60405180910390a150506000805460ff1916905550919392505050565b600554600160e01b900463ffffffff1681565b60005460ff1615611e365760405162461bcd60e51b815260040161078d906142b8565b6000805460ff19166001179055611e4d8386612fca565b611e578385612fed565b8015611ec45760405163d5b9979760e01b81526001600160a01b0384169063d5b9979790611e919033908990899088908890600401613fe2565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b505050505b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611ef5903090600401613fa5565b60206040518083038186803b158015611f0d57600080fd5b505afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190613d7a565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190611f7b903090600401613fa5565b60206040518083038186803b158015611f9357600080fd5b505afa158015611fa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcb9190613d7a565b6003549091506001600160701b031682101580611ffa5750600354600160701b90046001600160701b03168110155b6120165760405162461bcd60e51b815260040161078d906141d0565b6003546001600160701b03168210156121e05760035460009061204a908390600160701b90046001600160701b0316612995565b905060008060008061205c32866111d8565b600354939750919550935091508490612084906001600160701b03168963ffffffff61299516565b11156120a25760405162461bcd60e51b815260040161078d906141d0565b6000546120bf90630100000090046001600160a01b031684612fca565b8160028111156120cb57fe5b600554600160e01b900463ffffffff908116911614612181576001600160701b0381111561210b5760405162461bcd60e51b815260040161078d906144cb565b60058054600160701b600160e01b031916600160701b6001600160701b0384160217905581600281111561213b57fe5b6005601c6101000a81548163ffffffff021916908363ffffffff160217905550600080516020614764833981519152826040516121789190614135565b60405180910390a15b600080516020614784833981519152600260009054906101000a90046001600160a01b0316600160009054906101000a90046001600160a01b03168787338f6040516121d29695949392919061405b565b60405180910390a150505050505b600354600160701b90046001600160701b03168110156123a85760035460009061221a9084906001600160701b031663ffffffff61299516565b905060008060008061222c3286611440565b60035493975091955093509150849061225590600160701b90046001600160701b031688612995565b11156122735760405162461bcd60e51b815260040161078d906141d0565b60005461229090630100000090046001600160a01b031684612fed565b81600281111561229c57fe5b600554600160e01b900463ffffffff908116911614612349576001600160701b038111156122dc5760405162461bcd60e51b815260040161078d906144cb565b600580546001600160701b0319166001600160701b03831617905581600281111561230357fe5b6005601c6101000a81548163ffffffff021916908363ffffffff160217905550600080516020614764833981519152826040516123409190614135565b60405180910390a15b600080516020614784833981519152600160009054906101000a90046001600160a01b0316600260009054906101000a90046001600160a01b03168787338f60405161239a9695949392919061405b565b60405180910390a150505050505b6123b0613010565b7f0b82e93068db15abd9fbb2682c65462ea8a0a10582dce93a5664818e296f54eb338689896040516123e59493929190613fb9565b60405180910390a150506000805460ff191690555050505050565b6002546001600160a01b031681565b4284101561242f5760405162461bcd60e51b815260040161078d906144ed565b600c546001600160a01b0388166000908152600d602090815260408083208054600181019091559051929392612490927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d91016140e3565b604051602081830303815290604052805190602001206040516020016124b7929190613f8a565b6040516020818303038152906040528051906020012090506000600182868686604051600081526020016040526040516124f49493929190614117565b6020604051602081039080840390855afa158015612516573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061254c5750886001600160a01b0316816001600160a01b0316145b6125685760405162461bcd60e51b815260040161078d90614281565b61257389898961292d565b505050505050505050565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b6000805460ff16156125cd5760405162461bcd60e51b815260040161078d906142b8565b6000805460ff191660011781556002546040516370a0823160e01b81526001600160a01b03909116906370a082319061260a903090600401613fa5565b60206040518083038186803b15801561262257600080fd5b505afa158015612636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265a9190613d7a565b60035490915060009061267e908390600160701b90046001600160701b0316612995565b9050600080600061268f32856111d8565b92985090945090925090506126a48787612fca565b6000546126c190630100000090046001600160a01b031684612fca565b8060028111156126cd57fe5b600554600160e01b900463ffffffff908116911614612783576001600160701b0382111561270d5760405162461bcd60e51b815260040161078d906144cb565b60058054600160701b600160e01b031916600160701b6001600160701b0385160217905580600281111561273d57fe5b6005601c6101000a81548163ffffffff021916908363ffffffff1602179055506000805160206147648339815191528160405161277a9190614135565b60405180910390a15b6001546040516370a0823160e01b815261280b916001600160a01b0316906370a08231906127b5903090600401613fa5565b60206040518083038186803b1580156127cd57600080fd5b505afa1580156127e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128059190613d7a565b86612b2b565b60025460015460405160008051602061478483398151915292611de3926001600160a01b039182169291169088908b9033908e9061405b565b6005546001600160701b031681565b60105481565b60006111d36128666115b0565b6131d8565b600e546001600160a01b031681565b60115481565b6000806000806000806000612893613af6565b61289b6115b0565b905080600001519750806020015196508060400151955080606001519450806080015193508060a0015192508060c0015160028111156128d757fe5b91505090919293949596565b60045481565b60005460ff161561290c5760405162461bcd60e51b815260040161078d906142b8565b6000805460ff19166001179055612921613010565b6000805460ff19169055565b6001600160a01b038084166000818152600b602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906129889085906140da565b60405180910390a3505050565b6000828211156129b75760405162461bcd60e51b815260040161078d90614427565b50900390565b6000828201838110156129e25760405162461bcd60e51b815260040161078d9061451b565b9392505050565b6000670de0b6b3a7640000612a04848463ffffffff612e6c16565b81612a0b57fe5b049392505050565b60006129e2826118de85670de0b6b3a764000063ffffffff612e6c16565b6103e88111612a525760405162461bcd60e51b815260040161078d906141fb565b6001600160a01b0382166000908152600a6020526040902054612a7b908263ffffffff6129bd16565b6001600160a01b0383166000908152600a6020526040902055600954612aa7908263ffffffff6129bd16565b6009556040516001600160a01b038316907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688590612ae59084906140da565b60405180910390a2816001600160a01b031660006001600160a01b031660008051602061474483398151915283604051612b1f91906140da565b60405180910390a35050565b6001600160701b038211801590612b4957506001600160701b038111155b612b655760405162461bcd60e51b815260040161078d906144cb565b600380546001600160701b03838116600160701b02600160701b600160e01b03199186166001600160701b0319909316929092171617905560005460ff620100009091041615612bb757612bb76132ca565b5050565b600080808460c001516002811115612bcf57fe5b1415612bea57612bdf848461335f565b915060019050612cba565b60018460c001516002811115612bfc57fe5b1415612c0c57612bdf8484613386565b6000612c2985606001518660a0015161299590919063ffffffff16565b90506000612c488660800151876040015161299590919063ffffffff16565b905081851015612c7357612c5c86866133a3565b93506002925080841115612c6e578093505b612cb7565b81851415612c875780935060009250612cb7565b612cb0612ca387612c9e888663ffffffff61299516565b61335f565b829063ffffffff6129bd16565b9350600192505b50505b9250929050565b600080808460c001516002811115612cd557fe5b1415612cf057612ce584846133de565b915060029050612cba565b60018460c001516002811115612d0257fe5b1415612dad576000612d258560400151866080015161299590919063ffffffff16565b90506000612d448660a00151876060015161299590919063ffffffff16565b905081851015612d6f57612d5886866133fd565b93506001925080841115612d6a578093505b612da6565b81851415612d835780935060009250612da6565b612d9f612ca387612d9a888663ffffffff61299516565b6133de565b9350600292505b5050612cba565b612db7848461342f565b946002945092505050565b60028160c001516002811115612dd457fe5b1415612e1357612e098160600151612dfd8360800151846040015161299590919063ffffffff16565b8351602085015161344e565b60a0820152612e69565b60018160c001516002811115612e2557fe5b1415612e6957612e638160400151612e4e8360a00151846060015161299590919063ffffffff16565b8351612e5990613574565b846020015161344e565b60808201525b50565b600082612e7b5750600061061f565b82820282848281612e8857fe5b04146129e25760405162461bcd60e51b815260040161078d906145ae565b6000808211612ec75760405162461bcd60e51b815260040161078d906143c8565b818381612a0b57fe5b600080612edd8484612ea6565b905082810284038015612ef55750600101905061061f565b50905061061f565b6001600160a01b0382166000908152600a6020526040902054612f26908263ffffffff61299516565b6001600160a01b0383166000908152600a6020526040902055600954612f52908263ffffffff61299516565b6009556040516001600160a01b038316907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca590612f909084906140da565b60405180910390a260006001600160a01b0316826001600160a01b031660008051602061474483398151915283604051612b1f91906140da565b8015612bb757600154612bb7906001600160a01b0316838363ffffffff61359516565b8015612bb757600254612bb7906001600160a01b0316838363ffffffff61359516565b6001546040516370a0823160e01b81526000916001600160a01b0316906370a0823190613041903090600401613fa5565b60206040518083038186803b15801561305957600080fd5b505afa15801561306d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130919190613d7a565b6002546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906130c7903090600401613fa5565b60206040518083038186803b1580156130df57600080fd5b505afa1580156130f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131179190613d7a565b90506001600160701b03821180159061313757506001600160701b038111155b6131535760405162461bcd60e51b815260040161078d906144cb565b6003546001600160701b0316821461318157600380546001600160701b0319166001600160701b0384161790555b600354600160701b90046001600160701b031681146131bf5760038054600160701b600160e01b031916600160701b6001600160701b038416021790555b60005462010000900460ff1615612bb757612bb76132ca565b600060028260c0015160028111156131ec57fe5b141561327757606082015160a08301516000916132229161321891906118de908063ffffffff612e6c16565b8460600151612a13565b905061325f6132358460200151836129e9565b602085015161325390670de0b6b3a76400009063ffffffff61299516565b9063ffffffff6129bd16565b905061326f836000015182612a13565b91505061074a565b604082015160808301516000916132a79161329d91906118de908063ffffffff612e6c16565b8460400151612a13565b90506132ba6132358460200151836129e9565b905061326f8360000151826129e9565b60035463ffffffff42811691600160e01b900481168203908116158015906132fc57506003546001600160701b031615155b80156133195750600354600160701b90046001600160701b031615155b15613339578063ffffffff1661332d612859565b60048054919092020190555b506003805463ffffffff909216600160e01b026001600160e01b03909216919091179055565b60006129e2836080015184608001518461337c8760000151613574565b87602001516135f0565b60006129e2836080015184604001518461337c8760000151613574565b60006129e28360a001516133c48486606001516129bd90919063ffffffff16565b606086015186516133d490613574565b876020015161388d565b60006129e28360a001518460a0015184866000015187602001516135f0565b60006129e2836080015161341e8486604001516129bd90919063ffffffff16565b60408601518651602088015161388d565b60006129e28360a00151846060015184866000015187602001516135f0565b6000816134765761346f61346284866129e9565b869063ffffffff6129bd16565b905061356c565b846134835750600061356c565b600080613499600485028663ffffffff612e6c16565b9050806134b057670de0b6b3a76400009150613530565b8581878302816134bc57fe5b0414156134f7576134f06134eb6ec097ce7bc90715b34b9f1000000000613253848a028b63ffffffff612ea616565b613966565b9150613530565b61352d6134eb6ec097ce7bc90715b34b9f100000000061325389613521868d63ffffffff612ea616565b9063ffffffff612e6c16565b91505b600061355a670de0b6b3a7640000613253613551868363ffffffff61299516565b88600202612a13565b905061356688826129e9565b93505050505b949350505050565b600061061f6ec097ce7bc90715b34b9f10000000008363ffffffff612ea616565b6135eb8363a9059cbb60e01b84846040516024016135b4929190614095565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261399d565b505050565b60008086116136115760405162461bcd60e51b815260040161078d90614259565b8361361e57506000613884565b8161364b578461362e84866129e9565b116136425761363d83856129e9565b613644565b845b9050613884565b670de0b6b3a764000082141561370b5760008061366e858763ffffffff612e6c16565b90508061367e57600091506136d7565b86818883028161368a57fe5b0414156136ba576136b36136a4898063ffffffff612e6c16565b8289029063ffffffff612ea616565b91506136d7565b6136d4886118de8761352183838c8e63ffffffff612e6c16565b91505b6137026136f283670de0b6b3a764000063ffffffff6129bd16565b6118de898563ffffffff612e6c16565b92505050613884565b6000613738613720858763ffffffff612e6c16565b613253896135218a6118de898463ffffffff612e6c16565b9050600061375887613521670de0b6b3a76400008763ffffffff61299516565b9050600082821061376e57508190036000613774565b50810360015b61378c82670de0b6b3a764000063ffffffff612ea616565b915060006137c36137b06004613521670de0b6b3a76400008a63ffffffff61299516565b6137be8c6135218a8f6129e9565b6129e9565b90506137dc6134eb82613253868063ffffffff612e6c16565b905060006137fd6002613521670de0b6b3a76400008a63ffffffff61299516565b90506000831561383b57613817838663ffffffff61299516565b9050806138365760405162461bcd60e51b815260040161078d906143f0565b61384e565b61384b858463ffffffff6129bd16565b90505b600061385a8284613a5a565b90508b811115613874576000975050505050505050613884565b8b03965061388495505050505050565b95945050505050565b60008086116138ae5760405162461bcd60e51b815260040161078d90614259565b60006138d06138c3878763ffffffff61299516565b859063ffffffff612e6c16565b9050826138f7576138ef81670de0b6b3a764000063ffffffff612ea616565b915050613884565b6000613916613910886118de8b8063ffffffff612e6c16565b87612a13565b9050600061392485836129e9565b90506139596ec097ce7bc90715b34b9f10000000006118de8561352185613253670de0b6b3a76400008c63ffffffff61299516565b9998505050505050505050565b80600160028204015b818110156139975780915060028182858161398657fe5b04018161398f57fe5b04905061396f565b50919050565b60006060836001600160a01b0316836040516139b99190613eb9565b6000604051808303816000865af19150503d80600081146139f6576040519150601f19603f3d011682016040523d82523d6000602084013e6139fb565b606091505b509150915081613a1d5760405162461bcd60e51b815260040161078d9061436c565b805115613a545780806020019051810190613a389190613d5e565b613a545760405162461bcd60e51b815260040161078d9061453e565b50505050565b60006129e28261193a85670de0b6b3a764000063ffffffff612e6c16565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613ab957805160ff1916838001178555613ae6565b82800160010185558215613ae6579182015b82811115613ae6578251825591602001919060010190613acb565b50613af2929150613b3d565b5090565b6040518060e0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160006002811115613b3857fe5b905290565b61112e91905b80821115613af25760008155600101613b43565b80356001600160a01b038116811461061f57600080fd5b60008083601f840112613b7f578182fd5b50813567ffffffffffffffff811115613b96578182fd5b602083019150836020828501011115612cba57600080fd5b600060208284031215613bbf578081fd5b6129e28383613b57565b60008060408385031215613bdb578081fd5b613be58484613b57565b9150613bf48460208501613b57565b90509250929050565b600080600080600080600080610100898b031215613c19578384fd5b613c238a8a613b57565b9750613c328a60208b01613b57565b9650613c418a60408b01613b57565b955060608901359450613c578a60808b01613b57565b935060a0890135925060c0890135915060e0890135613c7581614726565b809150509295985092959890939650565b600080600060608486031215613c9a578283fd5b8335613ca581614711565b92506020840135613cb581614711565b929592945050506040919091013590565b600080600080600080600060e0888a031215613ce0578283fd5b613cea8989613b57565b9650613cf98960208a01613b57565b955060408801359450606088013593506080880135613d1781614734565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613d46578182fd5b613d508484613b57565b946020939093013593505050565b600060208284031215613d6f578081fd5b81516129e281614726565b600060208284031215613d8b578081fd5b5051919050565b600080600080600080600060c0888a031215613dac578283fd5b873596506020880135613dbe81614711565b95506040880135945060608801359350608088013567ffffffffffffffff811115613de7578384fd5b613df38a828b01613b6e565b989b979a5095989497959660a090950135949350505050565b600080600080600060808688031215613e23578081fd5b8535945060208601359350613e3b8760408801613b57565b9250606086013567ffffffffffffffff811115613e56578182fd5b613e6288828901613b6e565b969995985093965092949392505050565b600060208284031215613e84578081fd5b81516129e281614734565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60008251613ecb8184602087016146db565b9190910192915050565b6000808354600180821660008114613ef45760018114613f0b57613f3a565b60ff198316865260028304607f1686019350613f3a565b600283048786526020808720875b83811015613f325781548a820152908501908201613f19565b505050860193505b509195945050505050565b60008451613f578184602089016146db565b8451908301613f6a8282602089016146db565b8451918101613f7d8382602089016146db565b9091019695505050505050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b600060018060a01b038716825285602083015284604083015260806060830152614010608083018486613e8f565b979650505050505050565b600060018060a01b038816825286602083015285604083015284606083015260a0608083015261404f60a083018486613e8f565b98975050505050505050565b6001600160a01b0396871681529486166020860152604085019390935260608401919091528316608083015290911660a082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b6020810161414283614707565b91905290565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60006020825282518060208401526141938160408501602087016146db565b601f01601f19169190910160400192915050565b6020808252600f908201526e1114d417d253925512505312569151608a1b604082015260600190565b60208082526011908201527011931054d217d313d05397d19052531151607a1b604082015260600190565b60208082526016908201527509a929ca8be829a9eaa9ca8be9c9ea8be8a9c9eaa8e960531b604082015260600190565b60208082526014908201527308298989eae829c868abe9c9ea8be8a9c9eaa8e960631b604082015260600190565b6020808252600e908201526d5441524745545f49535f5a45524f60901b604082015260600190565b6020808252601e908201527f444f444f5f4453505f4c503a20494e56414c49445f5349474e41545552450000604082015260600190565b60208082526009908201526814915153951490539560ba1b604082015260600190565b60208082526015908201527414d1531317d09050d2d7d393d517d0531313d5d151605a1b604082015260600190565b60208082526011908201527016915493d7d45553d51157d05353d55395607a1b604082015260600190565b6020808252601a908201527f424153455f51554f54455f43414e5f4e4f545f42455f53414d45000000000000604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600d908201526c1393d7d09054d157d253941555609a1b604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b6020808252601c908201527f444f444f4d6174683a2073686f756c64206e6f74206265207a65726f00000000604082015260600190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b6020808252601390820152720ae92a89088a482aebe9c9ea8be8a9c9eaa8e9606b1b604082015260600190565b6020808252600e908201526d08898a0be9c9ea8be8a9c9eaa8e960931b604082015260600190565b6020808252601290820152710848298829c868abe9c9ea8be8a9c9eaa8e960731b604082015260600190565b6020808252600890820152674f564552464c4f5760c01b604082015260600190565b6020808252601490820152731113d113d7d114d417d3140e881156141254915160621b604082015260600190565b60208082526009908201526820a2222fa2a92927a960b91b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252600c908201526b1512535157d156141254915160a21b604082015260600190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b600060e082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015161461d81614707565b8060c08401525092915050565b6001600160701b0391909116815260200190565b918252602082015260400190565b84815260208101849052608081016003841061466457fe5b60408201939093526060015292915050565b9283526020830191909152604082015260600190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60005b838110156146f65781810151838201526020016146de565b83811115613a545750506000910152565b60038110612e6957fe5b6001600160a01b0381168114612e6957600080fd5b8015158114612e6957600080fd5b60ff81168114612e6957600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efdf176ad18be4f9f32efaa32f06e9d1175476504739a745f1399a6d3fa4b75917c2c0245e056d5fb095f04cd6373bc770802ebd1e6c918eb78fdef843cdb37b0fa2646970667358221220e03258d35c8a3ae3a5a3dda8555a6826f6d99ce0c1d06904be06be3ae4cbe70f64736f6c63430006090033