25 txs
7.6k calls
constructor
constructor()
functions
dynamicPrice
viewfunction dynamicPrice() view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getProductInfo
viewfunction getProductInfo(uint256 from, uint256 to) view returns (tuple[] products)
getProductLength
viewfunction getProductLength() view returns (uint256)
isDisabled
viewfunction isDisabled() view returns (bool)
maxDiscountRate
viewfunction maxDiscountRate() view returns (uint256)
nonces
viewfunction nonces(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
PRECISION
viewfunction PRECISION() view returns (uint256)
prime
viewfunction prime() view returns (address)
productInfo
viewfunction productInfo(uint256) view returns (uint256 priceEth, uint256 priceEthInUsd, uint256 pricePrime, uint256 pricePrimeInUsd, uint8 productType, address destinationAddress, bytes4 selector, uint256 startTimestamp, uint256 endTimestamp, bytes data)
roundingThreshold
viewfunction roundingThreshold() view returns (uint256)
signatureWindow
viewfunction signatureWindow() view returns (uint256)
trustedSigner
viewfunction trustedSigner() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
addNewProduct
nonpayablefunction addNewProduct(uint256 _priceEth, uint256 _priceEthInUsd, uint256 _pricePrime, uint256 _pricePrimeInUsd, uint8 _productType, address _destinationAddress, bytes4 _selector, uint256 _startTimestamp, uint256 _endTimestamp, bytes _data)
handleInvokeEchelon
nonpayablefunction handleInvokeEchelon(address _from, address, address, uint256, uint256 _ethValue, uint256 _primeValue, bytes _data)
renounceOwnership
nonpayablefunction renounceOwnership()
setDisabled
nonpayablefunction setDisabled(bool _isDisabled)
setDynamicPriceAddress
nonpayablefunction setDynamicPriceAddress(address _dynamicPrice)
setMaxDiscountRate
nonpayablefunction setMaxDiscountRate(uint256 _maxDiscountRate)
setPrimeAddress
nonpayablefunction setPrimeAddress(address _prime)
setRoundingThreshold
nonpayablefunction setRoundingThreshold(uint256 _roundingThreshold)
setSignatureWindow
nonpayablefunction setSignatureWindow(uint256 _signatureWindow)
setTrustedSigner
nonpayablefunction setTrustedSigner(address _address)
sweepERC20
nonpayablefunction sweepERC20(address _token)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateProduct
nonpayablefunction updateProduct(uint256 _productId, uint256 _priceEth, uint256 _priceEthInUsd, uint256 _pricePrime, uint256 _pricePrimeInUsd, uint8 _productType, address _destinationAddress, bytes4 _selector, uint256 _startTimestamp, uint256 _endTimestamp, bytes _data)
events
DynamicPriceAddressSet
event DynamicPriceAddressSet(address indexed dynamicPriceAddress)
EIP712DomainChanged
event EIP712DomainChanged()
IsDisabledSet
event IsDisabledSet(bool isDisabled)
MaxDiscountRateSet
event MaxDiscountRateSet(uint256 maxDiscountRate)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PhysicalProductPurchased
event PhysicalProductPurchased(address indexed payer, address indexed receiver, uint256 productId, uint256 amount, uint256 transactionId)
PrimeAddressSet
event PrimeAddressSet(address indexed primeAddress)
ProductAdded
event ProductAdded(uint256 productId, uint256 priceEth, uint256 priceEthInUsd, uint256 pricePrime, uint256 pricePrimeInUsd, uint8 productType, address destinationAddress, bytes4 selector, uint256 startTimestamp, uint256 endTimestamp, bytes data)
ProductsPurchased
event ProductsPurchased(address indexed payer, address indexed receiver, uint256[] productIds, uint256[] amounts, uint8 currency, uint256 amount, uint256 discount, uint256 additionalCost, uint256 transactionId)
ProductUpdated
event ProductUpdated(uint256 productId, uint256 priceEth, uint256 priceEthInUsd, uint256 pricePrime, uint256 pricePrimeInUsd, uint8 productType, address destinationAddress, bytes4 selector, uint256 startTimestamp, uint256 endTimestamp, bytes data)
RoundingThresholdSet
event RoundingThresholdSet(uint256 roundingThreshold)
SignatureWindowSet
event SignatureWindowSet(uint256 signatureWindow)
TrustedSignerSet
event TrustedSignerSet(address indexed trustedSigner)
errors
ContractDisabled
error ContractDisabled()
DestinationInvocationError
error DestinationInvocationError()
InvalidAmountPaid
error InvalidAmountPaid()
InvalidDestinationForDigitalProduct
error InvalidDestinationForDigitalProduct()
InvalidDestinationForPhysicalProduct
error InvalidDestinationForPhysicalProduct()
InvalidDiscountAmount
error InvalidDiscountAmount()
InvalidInvoker
error InvalidInvoker()
InvalidNonce
error InvalidNonce()
InvalidProductCurrency
error InvalidProductCurrency()
InvalidProductPrice
error InvalidProductPrice()
InvalidProductRange
error InvalidProductRange()
InvalidProductTimestamp
error InvalidProductTimestamp()
InvalidSelector
error InvalidSelector()
InvalidShortString
error InvalidShortString()
InvalidSig
error InvalidSig()
InvalidTimestamp
error InvalidTimestamp()
MaxDiscountRateOverflow
error MaxDiscountRateOverflow()
ParamLengthMissMatch
error ParamLengthMissMatch()
ProductSaleOver
error ProductSaleOver(uint256 productId)
StringTooLong
error StringTooLong(string str)
ZeroAddress
error ZeroAddress()
creation bytecode
0x6101606040526004805473b23d80f5fefcddaa212212f028021b41ded428cf6001600160a01b0319918216811790925560058054909116909117905560b46007556103e86008819055600b553480156200005857600080fd5b506040518060400160405280600d81526020016c0506172616c6c656c2053686f7609c1b815250604051806040016040528060058152602001640322e302e360dc1b815250620000b7620000b16200018c60201b60201c565b62000190565b620000d2600283620001ba60201b620013bf1790919060201c565b61012052620000ef816003620001ba602090811b620013bf17901c565b61014052815160208084019190912060e052815190820120610100524660a0526200017d60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526200048f565b3390565b600180546001600160a01b0319169055620001b7816200020a602090811b620013f217901c565b50565b6000602083511015620001da57620001d2836200025a565b905062000204565b82620001f183620002a660201b620014421760201c565b90620001fe90826200034e565b5060ff90505b92915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080829050601f8151111562000291578260405163305a27a960e01b81526004016200028891906200041a565b60405180910390fd5b80516200029e826200046a565b179392505050565b90565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002d457607f821691505b602082108103620002f557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034957600081815260208120601f850160051c81016020861015620003245750805b601f850160051c820191505b81811015620003455782815560010162000330565b5050505b505050565b81516001600160401b038111156200036a576200036a620002a9565b62000382816200037b8454620002bf565b84620002fb565b602080601f831160018114620003ba5760008415620003a15750858301515b600019600386901b1c1916600185901b17855562000345565b600085815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b8181101562000449578581018301518582016040015282016200042b565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620002f55760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051613264620004ea6000396000610a5401526000610a29015260006121d2015260006121aa015260006121050152600061212f0152600061215901526132646000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063aaf5eb6811610104578063dc4cad5d116100a2578063f2fde38b11610071578063f2fde38b146103e2578063f74d5480146103f5578063f928114a14610408578063fbc7b5301461041b57600080fd5b8063dc4cad5d146103a3578063e00af4a7146103b6578063e30c3978146103c9578063f2d61819146103da57600080fd5b8063c25b30f6116100de578063c25b30f614610354578063c7ee005e1461035d578063cfe32bd514610370578063d2c351b41461038357600080fd5b8063aaf5eb6814610319578063b8a878f914610322578063bb119f6e1461032b57600080fd5b806379ba50971161017157806384e742531161014b57806384e74253146102cf5780638da5cb5b146102e257806398b762a1146102f35780639d8f0f541461030657600080fd5b806379ba50971461027e5780637ecebe001461028657806384b0196e146102b457600080fd5b806356a1c701116101ad57806356a1c7011461022c5780636c57f5a91461023f5780636c5a7d1e14610263578063715018a61461027657600080fd5b80631443ea8b146101d45780633d06a969146101e95780634ceb6dfe14610219575b600080fd5b6101e76101e23660046125aa565b610424565b005b6005546101fc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101e761022736600461268c565b610476565b6101e761023a3660046125aa565b6108b9565b60065461025390600160a01b900460ff1681565b6040519015158152602001610210565b6101e761027136600461272c565b610932565b6101e7610992565b6101e761099c565b6102a66102943660046125aa565b600a6020526000908152604090205481565b604051908152602001610210565b6102bc610a1b565b60405161021097969594939291906127d4565b6101e76102dd366004612844565b610aa4565b6000546001600160a01b03166101fc565b6101e7610301366004612844565b610ae1565b6101e7610314366004612887565b610b41565b6102a661271081565b6102a660085481565b61033e610339366004612844565b610d0b565b6040516102109a99989796959493929190612977565b6102a6600b5481565b6004546101fc906001600160a01b031681565b6101e761037e366004612844565b610e09565b6103966103913660046129f4565b610e46565b6040516102109190612a16565b6101e76103b1366004612afd565b61108b565b6101e76103c43660046125aa565b61124e565b6001546001600160a01b03166101fc565b6009546102a6565b6101e76103f03660046125aa565b6112d5565b6006546101fc906001600160a01b031681565b6101e76104163660046125aa565b611346565b6102a660075481565b61042c611445565b600580546001600160a01b0319166001600160a01b0383169081179091556040517fdc54a56a5a56f183c5f46b96b8ddffcddbf3d17f45ccc3bbb3b316d3d4ab294090600090a250565b600654600160a01b900460ff16156104a1576040516303b14e6560e51b815260040160405180910390fd5b6004546001600160a01b031633146104cc576040516363a1e08760e11b815260040160405180910390fd5b60008060008060006104de8c8761149f565b9398509196509450925090506000805b85518110156107115761054f8787838151811061050d5761050d612bb7565b602002602001015187848151811061052757610527612bb7565b60200260200101518760048151811061054257610542612bb7565b60200260200101516114f4565b6106f383600988848151811061056757610567612bb7565b60200260200101518154811061057f5761057f612bb7565b906000526020600020906008020160405180610140016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff1660018111156105e5576105e5612936565b60018111156105f6576105f6612936565b8152600482015461010081046001600160a01b03166020830152600160a81b900460e01b6001600160e01b0319166040820152600582015460608201526006820154608082015260078201805460a09092019161065290612bcd565b80601f016020809104026020016040519081016040528092919081815260200182805461067e90612bcd565b80156106cb5780601f106106a0576101008083540402835291602001916106cb565b820191906000526020600020905b8154815290600101906020018083116106ae57829003601f168201915b5050505050815250508784815181106106e6576106e6612bb7565b6020026020010151611761565b6106fd9083612c1d565b91508061070981612c30565b9150506104ee565b508260018151811061072557610725612bb7565b6020026020010151816107389190612c1d565b90506127108360008151811061075057610750612bb7565b6020026020010151826107639190612c49565b61076d9190612c60565b6107779082612c82565b9050600082600181111561078d5761078d612936565b1480156107a1575061079f818a61193b565b155b156107bf5760405163fc01cc1d60e01b815260040160405180910390fd5b60018260018111156107d3576107d3612936565b1480156107e757506107e5818961193b565b155b156108055760405163fc01cc1d60e01b815260040160405180910390fd5b856001600160a01b03168d6001600160a01b03167f72a8e4f3ec4ecc4eaf0d5124d666ca904acaf116dc2c4ec28e9b07ee64a8cad2878786868960008151811061085157610851612bb7565b60200260200101518a60018151811061086c5761086c612bb7565b60200260200101518b60048151811061088757610887612bb7565b60200260200101516040516108a29796959493929190612c95565b60405180910390a350505050505050505050505050565b6108c1611445565b6001600160a01b0381166108e85760405163d92e233d60e01b815260040160405180910390fd5b600680546001600160a01b0319166001600160a01b0383169081179091556040517f65b80efdb610be9fc8e0cc1ab30c9f0b98b538c1392f298ec6ff69ae0768b74e90600090a250565b61093a611445565b60068054821515600160a01b0260ff60a01b199091161790556040517f0f2d85ce3010f9e00316762c7efe4ab1dbe6792d10c007c31f0def3339b663979061098790831515815260200190565b60405180910390a150565b61099a611445565b565b60015433906001600160a01b03168114610a0f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084015b60405180910390fd5b610a1881611970565b50565b600060608082808083610a4f7f00000000000000000000000000000000000000000000000000000000000000006002611989565b610a7a7f00000000000000000000000000000000000000000000000000000000000000006003611989565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b610aac611445565b600b8190556040518181527f6de97e7f18f0d91ac1cddfa2f09436a0d33a7f7d76f98a4eb007e7dc674467ca90602001610987565b610ae9611445565b612710811115610b0c5760405163780332f560e11b815260040160405180910390fd5b60088190556040518181527f772120364ef1825e4263ffba399b2a9535793627918fc081c9150f686014193190602001610987565b610b49611445565b610b5a8a8a8a8a8a8a8a8a8a611a2d565b60096040518061014001604052808c81526020018b81526020018a8152602001898152602001886001811115610b9257610b92612936565b81526001600160a01b0388166020808301919091526001600160e01b031988166040808401919091526060808401899052608080850189905260a090940187905285546001818101885560009788529684902086516008909202019081559285015183870155908401516002830155830151600382015590820151600482018054939492939192909160ff1916908381811115610c3157610c31612936565b021790555060a082015160048201805460c0850151610100600160c81b03199091166101006001600160a01b03909416840263ffffffff60a81b191617600160a81b60e092831c0217909155830151600583015582015160068201556101208201516007820190610ca29082612d35565b50506009547f9c8289ae8d9ee608382c27ead620b4300e959f1def7730d9831f9996a283aaa89150610cd690600190612c82565b8b8b8b8b8b8b8b8b8b8b604051610cf79b9a99989796959493929190612df5565b60405180910390a150505050505050505050565b60098181548110610d1b57600080fd5b60009182526020909120600890910201805460018201546002830154600384015460048501546005860154600687015460078801805497995095979496939560ff8416956001600160a01b0361010086041695600160a81b90950460e01b94909190610d8690612bcd565b80601f0160208091040260200160405190810160405280929190818152602001828054610db290612bcd565b8015610dff5780601f10610dd457610100808354040283529160200191610dff565b820191906000526020600020905b815481529060010190602001808311610de257829003601f168201915b505050505090508a565b610e11611445565b60078190556040518181527fe1e99fda360d334fb235dfe01785a279736301cf4e5d9c73e2201ad566ebfb2d90602001610987565b606082821015610e6957604051634649f6bb60e11b815260040160405180910390fd5b6000610e758484612c82565b610e80906001612c1d565b90508067ffffffffffffffff811115610e9b57610e9b6125c7565b604051908082528060200260200182016040528015610ed457816020015b610ec161251e565b815260200190600190039081610eb95790505b50915060005b81811015611083576009610eee8287612c1d565b81548110610efe57610efe612bb7565b906000526020600020906008020160405180610140016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff166001811115610f6457610f64612936565b6001811115610f7557610f75612936565b8152600482015461010081046001600160a01b03166020830152600160a81b900460e01b6001600160e01b0319166040820152600582015460608201526006820154608082015260078201805460a090920191610fd190612bcd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffd90612bcd565b801561104a5780601f1061101f5761010080835404028352916020019161104a565b820191906000526020600020905b81548152906001019060200180831161102d57829003601f168201915b50505050508152505083828151811061106557611065612bb7565b6020026020010181905250808061107b90612c30565b915050610eda565b505092915050565b611093611445565b6110a48a8a8a8a8a8a8a8a8a611a2d565b6040518061014001604052808b81526020018a81526020018981526020018881526020018760018111156110da576110da612936565b8152602001866001600160a01b03168152602001856001600160e01b03191681526020018481526020018381526020018281525060098c8154811061112157611121612bb7565b90600052602060002090600802016000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083600181111561118157611181612936565b021790555060a082015160048201805460c0850151610100600160c81b03199091166101006001600160a01b03909416840263ffffffff60a81b191617600160a81b60e092831c02179091558301516005830155820151600682015561012082015160078201906111f29082612d35565b509050507fbbdfdf76e7236ce64ba9276aa8b5452a1e211b98a9858a9976d8f4d513ed4cbc8b8b8b8b8b8b8b8b8b8b8b6040516112399b9a99989796959493929190612df5565b60405180910390a15050505050505050505050565b611256611445565b6040516370a0823160e01b8152306004820152610a189033906001600160a01b038416906370a0823190602401602060405180830381865afa1580156112a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c49190612e7a565b6001600160a01b0384169190611b62565b6112dd611445565b600180546001600160a01b0383166001600160a01b0319909116811790915561130e6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61134e611445565b6001600160a01b0381166113755760405163d92e233d60e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040517f6f45bf27e8660e4f757981edcc8981852feb4cda73d7af2637c107f3f0130c9690600090a250565b60006020835110156113db576113d483611bb9565b90506113ec565b816113e68482612d35565b5060ff90505b92915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b90565b6000546001600160a01b0316331461099a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a06565b6000606080606060008060008060008060008b8060200190518101906114c59190612f6e565b9550955095509550955095506114e08d878787878787611bf7565b50939b929a50909850965090945092505050565b6009838154811061150757611507612bb7565b90600052602060002090600802016005015442108061154957506009838154811061153457611534612bb7565b90600052602060002090600802016006015442115b1561156a576040516363112d6d60e11b815260048101849052602401610a06565b60006009848154811061157f5761157f612bb7565b600091825260209091206004600890920201015460ff1660018111156115a7576115a7612936565b0361175b576000600984815481106115c1576115c1612bb7565b906000526020600020906008020160040160159054906101000a900460e01b60405160200161160091906001600160e01b031991909116815260040190565b60408051601f198184030181528282526001600160a01b038816602084015290820185905260608201849052906080016040516020818303038152906040526009868154811061165257611652612bb7565b906000526020600020906008020160070160405160200161167492919061303b565b60408051601f198184030181529082905261169292916020016130c8565b60405160208183030381529060405290506000600985815481106116b8576116b8612bb7565b906000526020600020906008020160040160019054906101000a90046001600160a01b03166001600160a01b0316826040516116f491906130f7565b6000604051808303816000865af19150503d8060008114611731576040519150601f19603f3d011682016040523d82523d6000602084013e611736565b606091505b505090508061175857604051631f3d9f8b60e01b815260040160405180910390fd5b50505b50505050565b60008084600181111561177657611776612936565b0361185557825115801561178c57506020830151155b156117aa5760405163520e793960e11b815260040160405180910390fd5b8251156117cf5782516117be908390612c49565b6117c89082612c1d565b9050611934565b60055460208401516001600160a01b0390911690638fc7a25d906117f4908590612c49565b6040518263ffffffff1660e01b815260040161181291815260200190565b6020604051808303816000875af1158015611831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117be9190612e7a565b604083015115801561186957506060830151155b156118875760405163520e793960e11b815260040160405180910390fd5b6040830151156118a1578183604001516117be9190612c49565b60055460608401516001600160a01b039091169063ca027a29906118c6908590612c49565b6040518263ffffffff1660e01b81526004016118e491815260200190565b6020604051808303816000875af1158015611903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119279190612e7a565b6119319082612c1d565b90505b9392505050565b6000806119488385613113565b9050600b5460008212156119645761195f8261313a565b611966565b815b1115949350505050565b600180546001600160a01b0319169055610a18816113f2565b606060ff831461199c576113d483611d81565b8180546119a890612bcd565b80601f01602080910402602001604051908101604052809291908181526020018280546119d490612bcd565b8015611a215780601f106119f657610100808354040283529160200191611a21565b820191906000526020600020905b815481529060010190602001808311611a0457829003601f168201915b505050505090506113ec565b6000856001811115611a4157611a41612936565b148015611a4c575060005b15611a6a57604051631cd4b64760e21b815260040160405180910390fd5b80821115611a8b57604051631cf07cf360e01b815260040160405180910390fd5b6000856001811115611a9f57611a9f612936565b148015611ab457506001600160a01b0384163b155b15611ad2576040516309a5fc4560e21b815260040160405180910390fd5b6001856001811115611ae657611ae6612936565b148015611afb57506001600160a01b03841615155b15611b195760405163aa5bf87760e01b815260040160405180910390fd5b88158015611b25575087155b8015611b2f575086155b8015611b39575085155b15611b575760405163a9dd91a160e01b815260040160405180910390fd5b505050505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611bb4908490611dc0565b505050565b600080829050601f81511115611be4578260405163305a27a960e01b8152600401610a069190613156565b8051611bef82613169565b179392505050565b8351855114611c1957604051634af3c5a760e11b815260040160405180910390fd5b60085483600081518110611c2f57611c2f612bb7565b60200260200101511115611c56576040516312dd4e8f60e01b815260040160405180910390fd5b6001600160a01b0387166000908152600a6020526040902054611c7a906001612c1d565b83600281518110611c8d57611c8d612bb7565b602002602001015114611cb357604051633ab3447f60e11b815260040160405180910390fd5b60075483600381518110611cc957611cc9612bb7565b6020026020010151611cdb9190612c1d565b421115611cfb5760405163b7d0949760e01b815260040160405180910390fd5b600654611d17906001600160a01b031688888888888888611e95565b611d345760405163c90c66b560e01b815260040160405180910390fd5b82600281518110611d4757611d47612bb7565b6020026020010151600a6000896001600160a01b03166001600160a01b031681526020019081526020016000208190555050505050505050565b60606000611d8e83611f93565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000611e15826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fbb9092919063ffffffff16565b9050805160001480611e36575080806020019051810190611e36919061318d565b611bb45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a06565b600080611f657f4fc31d5f9e1a6a54ac26270b18a55c21c703c0d73fa014227697404acb4a13c08a8a8a604051602001611ecf91906131aa565b604051602081830303815290604052805190602001208a604051602001611ef691906131aa565b604051602081830303815290604052805190602001208a604051602001611f1d91906131aa565b604051602081830303815290604052805190602001208a604051602001611f4a97969594939291906131e0565b60405160208183030381529060405280519060200120611fca565b9050896001600160a01b0316611f7b8285611ff7565b6001600160a01b0316149a9950505050505050505050565b600060ff8216601f8111156113ec57604051632cd44ac360e21b815260040160405180910390fd5b6060611931848460008561201b565b60006113ec611fd76120f8565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006120068585612228565b915091506120138161226d565b509392505050565b60608247101561207c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a06565b600080866001600160a01b0316858760405161209891906130f7565b60006040518083038185875af1925050503d80600081146120d5576040519150601f19603f3d011682016040523d82523d6000602084013e6120da565b606091505b50915091506120eb878383876123b7565b925050505b949350505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561215157507f000000000000000000000000000000000000000000000000000000000000000046145b1561217b57507f000000000000000000000000000000000000000000000000000000000000000090565b612223604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b600080825160410361225e5760208301516040840151606085015160001a61225287828585612430565b94509450505050612266565b506000905060025b9250929050565b600081600481111561228157612281612936565b036122895750565b600181600481111561229d5761229d612936565b036122ea5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610a06565b60028160048111156122fe576122fe612936565b0361234b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a06565b600381600481111561235f5761235f612936565b03610a185760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a06565b6060831561242657825160000361241f576001600160a01b0385163b61241f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a06565b50816120f0565b6120f083836124f4565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561246757506000905060036124eb565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156124bb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166124e4576000600192509250506124eb565b9150600090505b94509492505050565b8151156125045781518083602001fd5b8060405162461bcd60e51b8152600401610a069190613156565b604051806101400160405280600081526020016000815260200160008152602001600081526020016000600181111561255957612559612936565b815260200160006001600160a01b0316815260200160006001600160e01b03191681526020016000815260200160008152602001606081525090565b6001600160a01b0381168114610a1857600080fd5b6000602082840312156125bc57600080fd5b813561193481612595565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612606576126066125c7565b604052919050565b600067ffffffffffffffff821115612628576126286125c7565b50601f01601f191660200190565b600082601f83011261264757600080fd5b813561265a6126558261260e565b6125dd565b81815284602083860101111561266f57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600060e0888a0312156126a757600080fd5b87356126b281612595565b965060208801356126c281612595565b955060408801356126d281612595565b9450606088013593506080880135925060a0880135915060c088013567ffffffffffffffff81111561270357600080fd5b61270f8a828b01612636565b91505092959891949750929550565b8015158114610a1857600080fd5b60006020828403121561273e57600080fd5b81356119348161271e565b60005b8381101561276457818101518382015260200161274c565b50506000910152565b60008151808452612785816020860160208601612749565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156127c9578151875295820195908201906001016127ad565b509495945050505050565b60ff60f81b8816815260e0602082015260006127f360e083018961276d565b8281036040840152612805818961276d565b606084018890526001600160a01b038716608085015260a0840186905283810360c085015290506128368185612799565b9a9950505050505050505050565b60006020828403121561285657600080fd5b5035919050565b60028110610a1857600080fd5b80356001600160e01b03198116811461288257600080fd5b919050565b6000806000806000806000806000806101408b8d0312156128a757600080fd5b8a35995060208b0135985060408b0135975060608b0135965060808b01356128ce8161285d565b955060a08b01356128de81612595565b94506128ec60c08c0161286a565b935060e08b013592506101008b013591506101208b013567ffffffffffffffff81111561291857600080fd5b6129248d828e01612636565b9150509295989b9194979a5092959850565b634e487b7160e01b600052602160045260246000fd5b60028110610a1857634e487b7160e01b600052602160045260246000fd5b6129738161294c565b9052565b60006101408c83528b60208401528a604084015289606084015261299a8961294c565b608083018990526001600160a01b03881660a08401526001600160e01b0319871660c084015260e08301869052610100830185905261012083018190526129e38184018561276d565b9d9c50505050505050505050505050565b60008060408385031215612a0757600080fd5b50508035926020909101359150565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612aef57603f19898403018552815161014081518552888201518986015287820151888601526060808301518187015250608080830151612a848288018261296a565b505060a0828101516001600160a01b03169086015260c0808301516001600160e01b0319169086015260e08083015190860152610100808301519086015261012091820151918501819052612adb8186018361276d565b968901969450505090860190600101612a3d565b509098975050505050505050565b60008060008060008060008060008060006101608c8e031215612b1f57600080fd5b8b359a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135612b4d8161285d565b955060c08c0135612b5d81612595565b9450612b6b60e08d0161286a565b93506101008c013592506101208c013591506101408c013567ffffffffffffffff811115612b9857600080fd5b612ba48e828f01612636565b9150509295989b509295989b9093969950565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680612be157607f821691505b602082108103612c0157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156113ec576113ec612c07565b600060018201612c4257612c42612c07565b5060010190565b80820281158282048414176113ec576113ec612c07565b600082612c7d57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156113ec576113ec612c07565b60e081526000612ca860e083018a612799565b8281036020840152612cba818a612799565b915050612cc68761294c565b60408201969096526060810194909452608084019290925260a083015260c09091015292915050565b601f821115611bb457600081815260208120601f850160051c81016020861015612d165750805b601f850160051c820191505b8181101561175857828155600101612d22565b815167ffffffffffffffff811115612d4f57612d4f6125c7565b612d6381612d5d8454612bcd565b84612cef565b602080601f831160018114612d985760008415612d805750858301515b600019600386901b1c1916600185901b178555611758565b600085815260208120601f198616915b82811015612dc757888601518255948401946001909101908401612da8565b5085821015612de55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006101608d83528c60208401528b60408401528a6060840152896080840152612e1e8961294c565b60a083018990526001600160a01b03881660c08401526001600160e01b0319871660e0840152610100830186905261012083018590526101408301819052612e688184018561276d565b9e9d5050505050505050505050505050565b600060208284031215612e8c57600080fd5b5051919050565b805161288281612595565b600082601f830112612eaf57600080fd5b8151602067ffffffffffffffff821115612ecb57612ecb6125c7565b8160051b612eda8282016125dd565b9283528481018201928281019087851115612ef457600080fd5b83870192505b84831015612f1357825182529183019190830190612efa565b979650505050505050565b80516128828161285d565b600082601f830112612f3a57600080fd5b8151612f486126558261260e565b818152846020838601011115612f5d57600080fd5b6120f0826020830160208701612749565b60008060008060008060c08789031215612f8757600080fd5b612f9087612e93565b9550602087015167ffffffffffffffff80821115612fad57600080fd5b612fb98a838b01612e9e565b96506040890151915080821115612fcf57600080fd5b612fdb8a838b01612e9e565b95506060890151915080821115612ff157600080fd5b612ffd8a838b01612e9e565b945061300b60808a01612f1e565b935060a089015191508082111561302157600080fd5b5061302e89828a01612f29565b9150509295509295509295565b60008351602061304e8285838901612749565b81840191506000855461306081612bcd565b60018281168015613078576001811461308d576130b9565b60ff19841687528215158302870194506130b9565b896000528560002060005b848110156130b157815489820152908301908701613098565b505082870194505b50929998505050505050505050565b600083516130da818460208801612749565b8351908301906130ee818360208801612749565b01949350505050565b60008251613109818460208701612749565b9190910192915050565b818103600083128015838313168383128216171561313357613133612c07565b5092915050565b6000600160ff1b820161314f5761314f612c07565b5060000390565b602081526000611934602083018461276d565b80516020808301519190811015612c015760001960209190910360031b1b16919050565b60006020828403121561319f57600080fd5b81516119348161271e565b815160009082906020808601845b838110156131d4578151855293820193908201906001016131b8565b50929695505050505050565b8781526001600160a01b03878116602083015286166040820152606081018590526080810184905260a0810183905260e0810161321c8361294c565b8260c08301529897505050505050505056fea26469706673582212209e49c8d9eaf16a2029ac8a2169387f5810927ba81aa5dd99d9cb3832d0f33a8d64736f6c63430008110033