[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "purchaser", "type": "address" }, { "indexed": true, "internalType": "address", "name": "dealAddress", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "poolTokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "sponsorFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "aelinFee", "type": "uint256" } ], "name": "AcceptDeal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "name", "type": "string" }, { "indexed": false, "internalType": "string", "name": "symbol", "type": "string" }, { "indexed": false, "internalType": "uint8", "name": "decimals", "type": "uint8" } ], "name": "AelinToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "name", "type": "string" }, { "indexed": false, "internalType": "string", "name": "symbol", "type": "string" }, { "indexed": true, "internalType": "address", "name": "sponsor", "type": "address" }, { "indexed": true, "internalType": "address", "name": "dealContract", "type": "address" } ], "name": "CreateDeal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "dealContract", "type": "address" }, { "indexed": true, "internalType": "address", "name": "underlyingDealToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "purchaseTokenTotalForDeal", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "underlyingDealTokenTotal", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "vestingPeriod", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "vestingCliff", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "proRataRedemptionPeriod", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "openRedemptionPeriod", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "holder", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "holderFundingDuration", "type": "uint256" } ], "name": "DealDetail", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "purchaser", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "purchaseTokenAmount", "type": "uint256" } ], "name": "PurchasePoolToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sponsor", "type": "address" } ], "name": "SetSponsor", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "purchaser", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "purchaseTokenAmount", "type": "uint256" } ], "name": "WithdrawFromPool", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "poolTokenAmount", "type": "uint256" } ], "name": "acceptDealTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "acceptMaxDealTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "acceptSponsor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "aelinDeal", "outputs": [ { "internalType": "contract AelinDeal", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "aelinDealLogicAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "aelinRewardsAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "allowList", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "amountAccepted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "calledInitialize", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_underlyingDealToken", "type": "address" }, { "internalType": "uint256", "name": "_purchaseTokenTotalForDeal", "type": "uint256" }, { "internalType": "uint256", "name": "_underlyingDealTokenTotal", "type": "uint256" }, { "internalType": "uint256", "name": "_vestingPeriod", "type": "uint256" }, { "internalType": "uint256", "name": "_vestingCliff", "type": "uint256" }, { "internalType": "uint256", "name": "_proRataRedemptionPeriod", "type": "uint256" }, { "internalType": "uint256", "name": "_openRedemptionPeriod", "type": "uint256" }, { "internalType": "address", "name": "_holder", "type": "address" }, { "internalType": "uint256", "name": "_holderFundingDuration", "type": "uint256" } ], "name": "createDeal", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "futureSponsor", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hasAllowList", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "holder", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "holderFundingExpiry", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "_purchaseTokenCap", "type": "uint256" }, { "internalType": "address", "name": "_purchaseToken", "type": "address" }, { "internalType": "uint256", "name": "_duration", "type": "uint256" }, { "internalType": "uint256", "name": "_sponsorFee", "type": "uint256" }, { "internalType": "address", "name": "_sponsor", "type": "address" }, { "internalType": "uint256", "name": "_purchaseDuration", "type": "uint256" }, { "internalType": "address", "name": "_aelinDealLogicAddress", "type": "address" }, { "internalType": "address", "name": "_aelinRewardsAddress", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "purchaser", "type": "address" } ], "name": "maxDealAccept", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "purchaser", "type": "address" } ], "name": "maxProRataAvail", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "openPeriodEligible", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolExpiry", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proRataConversion", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "purchaseExpiry", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_purchaseTokenAmount", "type": "uint256" } ], "name": "purchasePoolTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "purchaseToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "purchaseTokenCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "purchaseTokenDecimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "purchaseTokenTotalForDeal", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_sponsor", "type": "address" } ], "name": "setSponsor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sponsor", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sponsorFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAmountAccepted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_allowList", "type": "address[]" }, { "internalType": "uint256[]", "name": "_allowListAmounts", "type": "uint256[]" } ], "name": "updateAllowList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "purchaseTokenAmount", "type": "uint256" } ], "name": "withdrawFromPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawMaxFromPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526015805460ff191690553480156200001b57600080fd5b50604080516020808201808452600080845284519283019094529281528151919290916200004c916003916200006b565b508051620000629060049060208401906200006b565b5050506200014e565b828054620000799062000111565b90600052602060002090601f0160209004810192826200009d5760008555620000e8565b82601f10620000b857805160ff1916838001178555620000e8565b82800160010185558215620000e8579182015b82811115620000e8578251825591602001919060010190620000cb565b50620000f6929150620000fa565b5090565b5b80821115620000f65760008155600101620000fb565b600181811c908216806200012657607f821691505b602082108114156200014857634e487b7160e01b600052602260045260246000fd5b50919050565b613cf0806200015e6000396000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c80636e44fcaf1161015c578063b21cd9d9116100ce578063e3d7c12611610087578063e3d7c1261461057f578063e534155d14610597578063e5baea55146105aa578063e834cb11146105bd578063f7b3183f146105c6578063fc8dfa22146105e957600080fd5b8063b21cd9d91461051c578063c00be9fc14610524578063c02a78f11461052c578063c3d02fef14610535578063da6cedd71461053e578063dd62ed3e1461054657600080fd5b80638d6c7b5b116101205780638d6c7b5b146104b95780638eec3397146104c257806395d89b41146104d5578063a457c2d7146104dd578063a9059cbb146104f0578063a95c4d621461050357600080fd5b80636e44fcaf1461045a57806370a082311461046757806377c93662146104905780637934c775146104a35780637960a5b0146104ac57600080fd5b806330fc43ed116101f55780633bee26fe116101b95780633bee26fe146103fc5780634219dc401461040f57806351fdb6dc1461042257806359753fb11461042b5780635bf89a971461043e5780636ace7d0c1461045157600080fd5b806330fc43ed1461039d578063313ce567146103b057806338750891146103c957806339509351146103dc5780633b73d688146103ef57600080fd5b80631722db75116102475780631722db751461030e57806318160ddd1461032e5780631cd813621461033657806323b872dd146103615780632848aeaf146103745780632f00246a1461039457600080fd5b806301cebe571461028457806306fdde0314610299578063095ea7b3146102b757806310923d88146102da57806311ef9a2c146102fb575b600080fd5b61029761029236600461357f565b6105fc565b005b6102a1610703565b6040516102ae919061394a565b60405180910390f35b6102ca6102c53660046134de565b610795565b60405190151581526020016102ae565b6102ed6102e8366004613454565b6107ac565b6040519081526020016102ae565b6102ed610309366004613454565b610b58565b6102ed61031c366004613454565b60196020526000908152604090205481565b6002546102ed565b610349610344366004613508565b610d02565b6040516001600160a01b0390911681526020016102ae565b6102ca61036f3660046134a2565b611418565b6102ed610382366004613454565b601b6020526000908152604090205481565b6102ed60115481565b6102976103ab366004613737565b6114f7565b60085460ff165b60405160ff90911681526020016102ae565b600e54610349906001600160a01b031681565b6102ca6103ea3660046134de565b611503565b6015546102ca9060ff1681565b61029761040a366004613737565b61153f565b600f54610349906001600160a01b031681565b6102ed60105481565b610297610439366004613454565b61154b565b601654610349906001600160a01b031681565b6102ed60125481565b600a546103b79060ff1681565b6102ed610475366004613454565b6001600160a01b031660009081526020819052604090205490565b600d54610349906001600160a01b031681565b6102ed60145481565b601c546102ca9060ff1681565b6102ed60095481565b601754610349906001600160a01b031681565b6102a16115c1565b6102ca6104eb3660046134de565b6115d0565b6102ca6104fe3660046134de565b611669565b600854610349906201000090046001600160a01b031681565b61029761173d565b610297611758565b6102ed600c5481565b6102ed600b5481565b6102976117fe565b6102ed61055436600461346f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6015546103499061010090046001600160a01b031681565b601854610349906001600160a01b031681565b6102976105b8366004613737565b61180b565b6102ed60135481565b6102ca6105d4366004613454565b601a6020526000908152604090205460ff1681565b6102976105f7366004613668565b611b35565b600f546001600160a01b0316331480156106195750601c5460ff16155b80156106255750600254155b6106765760405162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920706f6f6c20666163746f72792063616e206163636573730000000060448201526064015b60405180910390fd5b601c805460ff1916600117905560005b82518110156106fe578181815181106106a1576106a1613c8e565b6020026020010151601b60008584815181106106bf576106bf613c8e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806106f690613c5d565b915050610686565b505050565b60606006805461071290613c22565b80601f016020809104026020016040519081016040528092919081815260200182805461073e90613c22565b801561078b5780601f106107605761010080835404028352916020019161078b565b820191906000526020600020905b81548152906001019060200180831161076e57829003601f168201915b5050505050905090565b60006107a2338484611ebf565b5060015b92915050565b6000601254600014806108425750601760009054906101000a90046001600160a01b03166001600160a01b03166399b9216e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561080857600080fd5b505afa15801561081c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108409190613750565b155b806109605750601760009054906101000a90046001600160a01b03166001600160a01b031663715e0cb76040518163ffffffff1660e01b815260040160206040518083038186803b15801561089657600080fd5b505afa1580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce9190613750565b42101580156109605750601760009054906101000a90046001600160a01b03166001600160a01b031663386c825e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561092657600080fd5b505afa15801561093a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095e9190613750565b155b80610a7f5750601760009054906101000a90046001600160a01b03166001600160a01b03166384a534ea6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109b457600080fd5b505afa1580156109c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ec9190613750565b4210158015610a7f5750601760009054906101000a90046001600160a01b03166001600160a01b031663386c825e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a4457600080fd5b505afa158015610a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7c9190613750565b15155b15610a8c57506000919050565b601760009054906101000a90046001600160a01b03166001600160a01b031663715e0cb76040518163ffffffff1660e01b815260040160206040518083038186803b158015610ada57600080fd5b505afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b129190613750565b421015610b22576107a682610b58565b6001600160a01b0382166000908152601a602052604090205460ff16610b4a57506000919050565b6107a682611fe3565b919050565b6001600160a01b0381166000908152602081905260408120541580610b7d5750601254155b80610c0b5750601760009054906101000a90046001600160a01b03166001600160a01b03166399b9216e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd157600080fd5b505afa158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c099190613750565b155b80610c9b5750601760009054906101000a90046001600160a01b03166001600160a01b031663715e0cb76040518163ffffffff1660e01b815260040160206040518083038186803b158015610c5f57600080fd5b505afa158015610c73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c979190613750565b4210155b15610ca857506000919050565b6001600160a01b0382166000908152601960209081526040808320549183905290912054670de0b6b3a764000090610ce1908390613a9b565b600b54610cee9190613bc0565b610cf89190613ab3565b6107a69190613bdf565b600d546000906001600160a01b03163314610d595760405162461bcd60e51b81526020600482015260176024820152766f6e6c792073706f6e736f722063616e2061636365737360481b604482015260640161066d565b60125415610e3957601760009054906101000a90046001600160a01b03166001600160a01b0316637d5210116040518163ffffffff1660e01b815260040160206040518083038186803b158015610daf57600080fd5b505afa158015610dc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de79190613646565b158015610df657506012544210155b610e395760405162461bcd60e51b815260206004820152601460248201527318d85b9d0818dc99585d19481b995dc81919585b60621b604482015260640161066d565b6001600160a01b038316610e8f5760405162461bcd60e51b815260206004820152601d60248201527f63616e742070617373206e756c6c20686f6c6465722061646472657373000000604482015260640161066d565b6001600160a01b038a16610ee55760405162461bcd60e51b815260206004820152601c60248201527f63616e742070617373206e756c6c20746f6b656e206164647265737300000000604482015260640161066d565b601054421015610f375760405162461bcd60e51b815260206004820152601b60248201527f706f6f6c207374696c6c20696e207075726368617365206d6f64650000000000604482015260640161066d565b8461070811158015610f4c57508462278d0010155b610f985760405162461bcd60e51b815260206004820152601d60248201527f3330206d696e73202d203330206461797320666f722070726f72617461000000604482015260640161066d565b8563096601801015610fdf5760405162461bcd60e51b815260206004820152601060248201526f36b0bc101a903cb2b0b91031b634b33360811b604482015260640161066d565b86630966018010156110285760405162461bcd60e51b81526020600482015260126024820152716d6178203520796561722076657374696e6760701b604482015260640161066d565b816107081115801561103d57508162278d0010155b6110895760405162461bcd60e51b815260206004820152601c60248201527f3330206d696e73202d203330206461797320666f7220686f6c64657200000000604482015260640161066d565b6002548911156110db5760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420656e6f7567682066756e647320617661696c61626c65000000000000604482015260640161066d565b6002546110f08a670de0b6b3a7640000613bc0565b6110fa9190613ab3565b600b819055670de0b6b3a7640000141561116157831561115c5760405162461bcd60e51b815260206004820152601a60248201527f6465616c20697320313a312c20736574206f70656e20746f2030000000000000604482015260640161066d565b6111c2565b836107081115801561117657508362278d0010155b6111c25760405162461bcd60e51b815260206004820152601a60248201527f3330206d696e73202d203330206461797320666f72206f70656e000000000000604482015260640161066d565b426011819055601880546001600160a01b0319166001600160a01b0386161790556111ee908390613a9b565b6012556014899055600a5460009061120a908b9060ff1661204d565b60165460408051808201909152601981527f436f756c64206e6f7420637265617465206e6577206465616c00000000000000602082015291925060009161125a916001600160a01b03169061206f565b905080601760006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601760009054906101000a90046001600160a01b03166001600160a01b0316633af8de42601d601e8f8e8e8e8e8e8e8c6012546040518c63ffffffff1660e01b81526004016112dc9b9a999897969594939291906139c4565b600060405180830381600087803b1580156112f657600080fd5b505af115801561130a573d6000803e3d6000fd5b5050600d546040516001600160a01b03858116945090911691507fa9b60eeb09e0c20c682942eea84e3e48673cae06e3311810b141222926d35f899061135590601d906020016138ba565b604051602081830303815290604052601e60405160200161137691906138d6565b60408051601f1981840301815290829052611391929161395d565b60405180910390a3604080518c8152602081018c90529081018a9052606081018990526080810188905260a0810187905260c081018590526001600160a01b03808716918e8216918416907f73a80a31e755eef6b1546c0f642cff2cdbdb7f1101228bbfa6a35dee8b0efb449060e00160405180910390a49b9a5050505050505050505050565b60175460408051634cdc90b760e11b815290516000926001600160a01b0316916399b9216e916004808301926020929190829003018186803b15801561145d57600080fd5b505afa158015611471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114959190613750565b156114e25760405162461bcd60e51b815260206004820181905260248201527f6e6f207472616e73666572732061667465722072656465656d20737461727473604482015260640161066d565b6114ed84848461211a565b90505b9392505050565b611500816121c4565b50565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916107a291859061153a908690613a9b565b611ebf565b6115003382600061235a565b600d546001600160a01b0316331461159f5760405162461bcd60e51b81526020600482015260176024820152766f6e6c792073706f6e736f722063616e2061636365737360481b604482015260640161066d565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60606007805461071290613c22565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116525760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161066d565b61165f3385858403611ebf565b5060019392505050565b60175460408051634cdc90b760e11b815290516000926001600160a01b0316916399b9216e916004808301926020929190829003018186803b1580156116ae57600080fd5b505afa1580156116c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e69190613750565b156117335760405162461bcd60e51b815260206004820181905260248201527f6e6f207472616e73666572732061667465722072656465656d20737461727473604482015260640161066d565b6114f08383612723565b33600090815260208190526040902054611756906121c4565b565b600e546001600160a01b031633146117b25760405162461bcd60e51b815260206004820152601e60248201527f6f6e6c79206675747572652073706f6e736f722063616e206163636573730000604482015260640161066d565b600e54600d80546001600160a01b0319166001600160a01b0390921691821790556040517f664990684c2a471ecd811b0746b52f569a208f58b796c699208ed71379bf3c2790600090a2565b611756336000600161235a565b600854610100900460ff16156118555760405162461bcd60e51b815260206004820152600f60248201526e10595b1a5b958c4e881313d0d2d151608a1b604482015260640161066d565b6008805461ff001916610100179055601c5460ff16156118ea57336000908152601b60205260409020548111156118c55760405162461bcd60e51b815260206004820152601460248201527336b7b932903a3430b71030b63637b1b0ba34b7b760611b604482015260640161066d565b336000908152601b6020526040812080548392906118e4908490613bdf565b90915550505b60105442106119345760405162461bcd60e51b81526020600482015260166024820152756e6f7420696e2070757263686173652077696e646f7760501b604482015260640161066d565b6008546040516370a0823160e01b81523060048201526000916201000090046001600160a01b0316906370a082319060240160206040518083038186803b15801561197e57600080fd5b505afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b69190613750565b6008549091506119d7906201000090046001600160a01b0316333085612730565b6008546040516370a0823160e01b81523060048201526000916201000090046001600160a01b0316906370a082319060240160206040518083038186803b158015611a2157600080fd5b505afa158015611a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a599190613750565b90506000611a678383613bdf565b60095490915015611ae557600081611a7e60025490565b611a889190613a9b565b9050600954811115611ad45760405162461bcd60e51b815260206004820152601560248201527418d85c081a185cc81899595b88195e18d959591959605a1b604482015260640161066d565b600954811415611ae357426010555b505b611aef33826127a1565b60405181815233907fed85c767ecdd6e01875333691e52fa2892c74b8060d513634948ffb60cbc58e19060200160405180910390a250506008805461ff00191690555050565b60155460ff1615611b835760405162461bcd60e51b815260206004820152601860248201527763616e206f6e6c7920696e697469616c697a65206f6e636560401b604482015260640161066d565b6015805460ff191660011790556107088310801590611ba557508262278d0010155b611bf15760405162461bcd60e51b815260206004820152601e60248201527f6f757473696465207075726368617365206578706972792077696e646f770000604482015260640161066d565b856301e133801015611c3b5760405162461bcd60e51b815260206004820152601360248201527236b0bc1018903cb2b0b910323ab930ba34b7b760691b604482015260640161066d565b68055005f0c614480000851115611c945760405162461bcd60e51b815260206004820152601760248201527f65786365656473206d61782073706f6e736f7220666565000000000000000000604482015260640161066d565b866001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611ccd57600080fd5b505afa158015611ce1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d059190613769565b600a805460ff191660ff92909216918217905560121015611d685760405162461bcd60e51b815260206004820152601760248201527f746f6f206d616e7920746f6b656e20646563696d616c73000000000000000000604482015260640161066d565b8951611d7b90601d9060208d01906132c2565b508851611d8f90601e9060208c01906132c2565b50600f80546001600160a01b03191633179055604051611df290611db7908c9060200161391b565b6040516020818303038152906040528a604051602001611dd791906138ef565b60408051601f19818403018152919052600a5460ff16612880565b5060098890556008805462010000600160b01b031916620100006001600160a01b038a1602179055611e248342613a9b565b6010819055611e34908790613a9b565b601155600c859055600d80546001600160a01b038087166001600160a01b03199283168117909355601680548683169316929092179091556015805491841661010002610100600160a81b03199092169190911790556040517f664990684c2a471ecd811b0746b52f569a208f58b796c699208ed71379bf3c2790600090a250505050505050505050565b6001600160a01b038316611f215760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161066d565b6001600160a01b038216611f825760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161066d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600060145460135461200a846001600160a01b031660009081526020819052604090205490565b6120149190613a9b565b111561202f5760135460145461202a9190613bdf565b6107a6565b6001600160a01b0382166000908152602081905260409020546107a6565b600061205a826012613bdf565b61206590600a613b18565b6114f09084613bc0565b60408051693d602d80600a3d3981f360b01b602082015269363d3d373d3d3d363d7360b01b602a8201526bffffffffffffffffffffffff19606085901b1660348201526e5af43d82803e903d91602b57fd5bf360881b60488201528151603781830301815260579091019091526000906037602082016000f09150826001600160a01b0383166121125760405162461bcd60e51b815260040161066d919061394a565b505092915050565b600061212784848461295d565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156121ac5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840161066d565b6121b98533858403611ebf565b506001949350505050565b6011544210156122165760405162461bcd60e51b815260206004820152601760248201527f6e6f742079657420776974686472617720706572696f64000000000000000000604482015260640161066d565b601254156122fb576012544211806122af5750601760009054906101000a90046001600160a01b03166001600160a01b0316637d5210116040518163ffffffff1660e01b815260040160206040518083038186803b15801561227757600080fd5b505afa15801561228b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122af9190613646565b6122fb5760405162461bcd60e51b815260206004820152601f60248201527f63616e7420776974686472617720696e2066756e64696e6720706572696f6400604482015260640161066d565b6123053382612b2b565b600854612322906201000090046001600160a01b03163383612c79565b60405181815233907fd086fe118173f0ec274f5f6a8acd4cef86bf07205539d88e5e0bbd45d5d4e24b9060200160405180910390a250565b60006012541180156123ed5750601760009054906101000a90046001600160a01b03166001600160a01b0316637d5210116040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b557600080fd5b505afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed9190613646565b61242f5760405162461bcd60e51b81526020600482015260136024820152721919585b081b9bdd081e595d08199d5b991959606a1b604482015260640161066d565b600854610100900460ff16156124795760405162461bcd60e51b815260206004820152600f60248201526e10595b1a5b958c4e881313d0d2d151608a1b604482015260640161066d565b6008805461ff00191661010017905560175460408051634cdc90b760e11b815290516001600160a01b03909216916399b9216e91600480820192602092909190829003018186803b1580156124cd57600080fd5b505afa1580156124e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125059190613750565b42101580156125985750601760009054906101000a90046001600160a01b03166001600160a01b031663715e0cb76040518163ffffffff1660e01b815260040160206040518083038186803b15801561255d57600080fd5b505afa158015612571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125959190613750565b42105b156125ad576125a8838383612ca9565b612713565b60175460408051631c36412f60e11b815290516000926001600160a01b03169163386c825e916004808301926020929190829003018186803b1580156125f257600080fd5b505afa158015612606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262a9190613750565b1180156126bb5750601760009054906101000a90046001600160a01b03166001600160a01b03166384a534ea6040518163ffffffff1660e01b815260040160206040518083038186803b15801561268057600080fd5b505afa158015612694573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b89190613750565b42105b156126cb576125a8838383612dbc565b60405162461bcd60e51b815260206004820152601860248201527f6f757473696465206f662072656465656d2077696e646f770000000000000000604482015260640161066d565b50506008805461ff001916905550565b60006107a233848461295d565b6040516001600160a01b038085166024830152831660448201526064810182905261279b9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612e9d565b50505050565b6001600160a01b0382166127f75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161066d565b80600260008282546128099190613a9b565b90915550506001600160a01b03821660009081526020819052604081208054839290612836908490613a9b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60055460009060ff16156128d15760405162461bcd60e51b815260206004820152601860248201527763616e206f6e6c7920696e697469616c697a65206f6e636560401b604482015260640161066d565b83516128e49060069060208701906132c2565b5082516128f89060079060208601906132c2565b506008805460ff841660ff19918216179091556005805490911660011790556040517f811e31b19fc82f080bbbe7c8811ecd6253e8f015dc86579d106a057b66c61bf89061294b9086908690869061398b565b60405180910390a15060019392505050565b6001600160a01b0383166129c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161066d565b6001600160a01b038216612a235760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161066d565b6001600160a01b03831660009081526020819052604090205481811015612a9b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161066d565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612ad2908490613a9b565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b1e91815260200190565b60405180910390a361279b565b6001600160a01b038216612b8b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161066d565b6001600160a01b03821660009081526020819052604090205481811015612bff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161066d565b6001600160a01b0383166000908152602081905260408120838303905560028054849290612c2e908490613bdf565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6040516001600160a01b0383166024820152604481018290526106fe90849063a9059cbb60e01b90606401612764565b6000612cb484610b58565b905081612d075780831115612d075760405162461bcd60e51b8152602060048201526019602482015278616363657074696e67206d6f7265207468616e20736861726560381b604482015260640161066d565b600082612d145783612d16565b815b6001600160a01b038616600090815260196020526040812080549293508392909190612d43908490613a9b565b925050819055508060136000828254612d5c9190613a9b565b90915550612d6c90508582612f6f565b600b54670de0b6b3a764000014158015612d8c5750612d8a85610b58565b155b15612db5576001600160a01b0385166000908152601a60205260409020805460ff191660011790555b5050505050565b6001600160a01b0383166000908152601a602052604090205460ff16612e245760405162461bcd60e51b815260206004820152601f60248201527f696e656c696769626c653a206469646e2774206d61782070726f207261746100604482015260640161066d565b6000612e2f84611fe3565b9050600082612e3e5783612e40565b815b905082612e935781811115612e935760405162461bcd60e51b8152602060048201526019602482015278616363657074696e67206d6f7265207468616e20736861726560381b604482015260640161066d565b612db58582612f6f565b6000612ef2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131b79092919063ffffffff16565b8051909150156106fe5780806020019051810190612f109190613646565b6106fe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161066d565b612f798282612b2b565b600a54600090612f8d90839060ff1661204d565b9050600068056bc75e2d63100000612fad671bc16d674ec8000084613bc0565b612fb79190613ab3565b9050600068056bc75e2d63100000600c5484612fd39190613bc0565b612fdd9190613ab3565b601754600d546040516340c10f1960e01b81526001600160a01b0391821660048201526024810184905292935016906340c10f1990604401600060405180830381600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b50506017546015546040516340c10f1960e01b81526001600160a01b036101009092048216600482015260248101879052911692506340c10f199150604401600060405180830381600087803b15801561309c57600080fd5b505af11580156130b0573d6000803e3d6000fd5b50506017546001600160a01b031691506340c10f199050866130d28585613a9b565b6130dc9087613bdf565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561312257600080fd5b505af1158015613136573d6000803e3d6000fd5b505060185460085461315d93506201000090046001600160a01b0390811692501686612c79565b60175460408051868152602081018490529081018490526001600160a01b03918216918716907f3029253c4425e996e6dc0abf76ffe4a134077eec7d8e65da386bca519f0676329060600160405180910390a35050505050565b60606114ed848460008585843b6132105760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161066d565b600080866001600160a01b0316858760405161322c919061389e565b60006040518083038185875af1925050503d8060008114613269576040519150601f19603f3d011682016040523d82523d6000602084013e61326e565b606091505b509150915061327e828286613289565b979650505050505050565b606083156132985750816114f0565b8251156132a85782518084602001fd5b8160405162461bcd60e51b815260040161066d919061394a565b8280546132ce90613c22565b90600052602060002090601f0160209004810192826132f05760008555613336565b82601f1061330957805160ff1916838001178555613336565b82800160010185558215613336579182015b8281111561333657825182559160200191906001019061331b565b50613342929150613346565b5090565b5b808211156133425760008155600101613347565b80356001600160a01b0381168114610b5357600080fd5b600082601f83011261338357600080fd5b8135602061339861339383613a77565b613a46565b80838252828201915082860187848660051b89010111156133b857600080fd5b60005b858110156133d7578135845292840192908401906001016133bb565b5090979650505050505050565b600082601f8301126133f557600080fd5b813567ffffffffffffffff81111561340f5761340f613ca4565b613422601f8201601f1916602001613a46565b81815284602083860101111561343757600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561346657600080fd5b6114f08261335b565b6000806040838503121561348257600080fd5b61348b8361335b565b91506134996020840161335b565b90509250929050565b6000806000606084860312156134b757600080fd5b6134c08461335b565b92506134ce6020850161335b565b9150604084013590509250925092565b600080604083850312156134f157600080fd5b6134fa8361335b565b946020939093013593505050565b60008060008060008060008060006101208a8c03121561352757600080fd5b6135308a61335b565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135925061356860e08b0161335b565b91506101008a013590509295985092959850929598565b6000806040838503121561359257600080fd5b823567ffffffffffffffff808211156135aa57600080fd5b818501915085601f8301126135be57600080fd5b813560206135ce61339383613a77565b8083825282820191508286018a848660051b89010111156135ee57600080fd5b600096505b84871015613618576136048161335b565b8352600196909601959183019183016135f3565b509650508601359250508082111561362f57600080fd5b5061363c85828601613372565b9150509250929050565b60006020828403121561365857600080fd5b815180151581146114f057600080fd5b6000806000806000806000806000806101408b8d03121561368857600080fd5b8a3567ffffffffffffffff808211156136a057600080fd5b6136ac8e838f016133e4565b9b5060208d01359150808211156136c257600080fd5b506136cf8d828e016133e4565b99505060408b013597506136e560608c0161335b565b965060808b0135955060a08b0135945061370160c08c0161335b565b935060e08b013592506137176101008c0161335b565b91506137266101208c0161335b565b90509295989b9194979a5092959850565b60006020828403121561374957600080fd5b5035919050565b60006020828403121561376257600080fd5b5051919050565b60006020828403121561377b57600080fd5b815160ff811681146114f057600080fd5b600081518084526137a4816020860160208601613bf6565b601f01601f19169290920160200192915050565b600081546137c581613c22565b8085526020600183811680156137e257600181146137f657613824565b60ff19851688840152604088019550613824565b866000528260002060005b8581101561381c5781548a8201860152908301908401613801565b890184019650505b505050505092915050565b6000815461383c81613c22565b60018281168015613854576001811461386557613894565b60ff19841687528287019450613894565b8560005260208060002060005b8581101561388b5781548a820152908401908201613872565b50505082870194505b5050505092915050565b600082516138b0818460208701613bf6565b9190910192915050565b6661654465616c2d60c81b815260006114f0600783018461382f565b636165442d60e01b815260006114f0600483018461382f565b636165502d60e01b81526000825161390e816004850160208701613bf6565b9190910160040192915050565b666165506f6f6c2d60c81b81526000825161393d816007850160208701613bf6565b9190910160070192915050565b6020815260006114f0602083018461378c565b604081526000613970604083018561378c565b8281036020840152613982818561378c565b95945050505050565b60608152600061399e606083018661378c565b82810360208401526139b0818661378c565b91505060ff83166040830152949350505050565b60006101608083526139d88184018f6137b8565b905082810360208401526139ec818e6137b8565b6001600160a01b039c8d166040850152606084019b909b525050608081019790975260a087019590955260c086019390935260e0850191909152909416610100830152610120820193909352610140019190915292915050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613a6f57613a6f613ca4565b604052919050565b600067ffffffffffffffff821115613a9157613a91613ca4565b5060051b60200190565b60008219821115613aae57613aae613c78565b500190565b600082613ad057634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115613b10578160001904821115613af657613af6613c78565b80851615613b0357918102915b93841c9390800290613ada565b509250929050565b60006114f08383600082613b2e575060016107a6565b81613b3b575060006107a6565b8160018114613b515760028114613b5b57613b77565b60019150506107a6565b60ff841115613b6c57613b6c613c78565b50506001821b6107a6565b5060208310610133831016604e8410600b8410161715613b9a575081810a6107a6565b613ba48383613ad5565b8060001904821115613bb857613bb8613c78565b029392505050565b6000816000190483118215151615613bda57613bda613c78565b500290565b600082821015613bf157613bf1613c78565b500390565b60005b83811015613c11578181015183820152602001613bf9565b8381111561279b5750506000910152565b600181811c90821680613c3657607f821691505b60208210811415613c5757634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613c7157613c71613c78565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220ee67674fc890b30b2c01ea58a82c5858a8663c979b0dec17fb3447a22b70978464736f6c63430008060033