diff --git a/contracts/artifacts/BatchExchange.json b/contracts/artifacts/BatchExchange.json index 43a662e23..5bfc07d27 100644 --- a/contracts/artifacts/BatchExchange.json +++ b/contracts/artifacts/BatchExchange.json @@ -1 +1 @@ -{"abi":[{"constant":true,"inputs":[],"name":"IMPROVEMENT_DENOMINATOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSecondsRemainingInBatch","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"requestWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FEE_FOR_LISTING_TOKEN_IN_OWL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"AMOUNT_MINIMUM","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"}],"name":"currentPrices","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"orders","outputs":[{"name":"buyToken","type":"uint16"},{"name":"sellToken","type":"uint16"},{"name":"validFrom","type":"uint32"},{"name":"validUntil","type":"uint32"},{"name":"priceNumerator","type":"uint128"},{"name":"priceDenominator","type":"uint128"},{"name":"usedAmount","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNLIMITED_ORDER_AMOUNT","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numTokens","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"lastCreditBatchId","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"latestSolution","outputs":[{"name":"batchId","type":"uint32"},{"name":"solutionSubmitter","type":"address"},{"name":"feeReward","type":"uint256"},{"name":"objectiveValue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"getPendingDeposit","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"getPendingWithdraw","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ENCODED_AUCTION_ELEMENT_WIDTH","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BATCH_TIME","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentBatchId","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"batchId","type":"uint32"}],"name":"requestFutureWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"hasValidWithdrawRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOUCHED_ORDERS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"maxTokens","type":"uint256"},{"name":"_feeToken","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"index","type":"uint16"},{"indexed":true,"name":"buyToken","type":"uint16"},{"indexed":true,"name":"sellToken","type":"uint16"},{"indexed":false,"name":"validFrom","type":"uint32"},{"indexed":false,"name":"validUntil","type":"uint32"},{"indexed":false,"name":"priceNumerator","type":"uint128"},{"indexed":false,"name":"priceDenominator","type":"uint128"}],"name":"OrderPlacement","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"id","type":"uint16"}],"name":"TokenListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"id","type":"uint16"}],"name":"OrderCancellation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"id","type":"uint16"}],"name":"OrderDeletion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"orderId","type":"uint16"},{"indexed":true,"name":"sellToken","type":"uint16"},{"indexed":false,"name":"buyToken","type":"uint16"},{"indexed":false,"name":"executedSellAmount","type":"uint128"},{"indexed":false,"name":"executedBuyAmount","type":"uint128"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"orderId","type":"uint16"},{"indexed":true,"name":"sellToken","type":"uint16"},{"indexed":false,"name":"buyToken","type":"uint16"},{"indexed":false,"name":"executedSellAmount","type":"uint128"},{"indexed":false,"name":"executedBuyAmount","type":"uint128"}],"name":"TradeReversion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"submitter","type":"address"},{"indexed":false,"name":"utility","type":"uint256"},{"indexed":false,"name":"disregardedUtility","type":"uint256"},{"indexed":false,"name":"burntFees","type":"uint256"},{"indexed":false,"name":"lastAuctionBurntFees","type":"uint256"},{"indexed":false,"name":"prices","type":"uint128[]"},{"indexed":false,"name":"tokenIdsForPrice","type":"uint16[]"}],"name":"SolutionSubmission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"batchId","type":"uint32"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"batchId","type":"uint32"}],"name":"WithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"addToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"buyToken","type":"uint16"},{"name":"sellToken","type":"uint16"},{"name":"validUntil","type":"uint32"},{"name":"buyAmount","type":"uint128"},{"name":"sellAmount","type":"uint128"}],"name":"placeOrder","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"buyTokens","type":"uint16[]"},{"name":"sellTokens","type":"uint16[]"},{"name":"validFroms","type":"uint32[]"},{"name":"validUntils","type":"uint32[]"},{"name":"buyAmounts","type":"uint128[]"},{"name":"sellAmounts","type":"uint128[]"}],"name":"placeValidFromOrders","outputs":[{"name":"orderIds","type":"uint16[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"orderIds","type":"uint16[]"}],"name":"cancelOrders","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"cancellations","type":"uint16[]"},{"name":"buyTokens","type":"uint16[]"},{"name":"sellTokens","type":"uint16[]"},{"name":"validFroms","type":"uint32[]"},{"name":"validUntils","type":"uint32[]"},{"name":"buyAmounts","type":"uint128[]"},{"name":"sellAmounts","type":"uint128[]"}],"name":"replaceOrders","outputs":[{"name":"","type":"uint16[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"batchId","type":"uint32"},{"name":"claimedObjectiveValue","type":"uint256"},{"name":"owners","type":"address[]"},{"name":"orderIds","type":"uint16[]"},{"name":"buyVolumes","type":"uint128[]"},{"name":"prices","type":"uint128[]"},{"name":"tokenIdsForPrice","type":"uint16[]"}],"name":"submitSolution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"tokenAddressToIdMap","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint16"}],"name":"tokenIdToAddressMap","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"hasToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"offset","type":"uint16"},{"name":"pageSize","type":"uint16"}],"name":"getEncodedUserOrdersPaginated","outputs":[{"name":"elements","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"previousPageUser","type":"address"},{"name":"pageSize","type":"uint16"}],"name":"getUsersPaginated","outputs":[{"name":"users","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"getEncodedUserOrders","outputs":[{"name":"elements","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"pageSize","type":"uint16"}],"name":"getEncodedUsersPaginated","outputs":[{"name":"elements","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getEncodedOrders","outputs":[{"name":"elements","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"batchId","type":"uint32"}],"name":"acceptingSolutions","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentObjectiveValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"bytecode":"0x60806040523480156200001157600080fd5b5060405162005e8e38038062005e8e833981810160405260408110156200003757600080fd5b5080516020918201516000808052600584527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc80546001600160801b031916670de0b6b3a76400001790556002839055600380546001600160a01b038085166201000090810262010000600160b01b03199093169290921792839055604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152306004820152600019602482015290519697959692909304169363095ea7b3936044808501949293928390030190829087803b1580156200011a57600080fd5b505af11580156200012f573d6000803e3d6000fd5b505050506040513d60208110156200014657600080fd5b506200015d9050816001600160e01b036200016516565b505062000403565b60025460035461ffff1610620001dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d617820746f6b656e7320726561636865640000000000000000000000000000604482015290519081900360640190fd5b60035461ffff16156200027c57600354604080517f4417f4db000000000000000000000000000000000000000000000000000000008152336004820152678ac7230489e8000060248201529051620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b1580156200026257600080fd5b505af115801562000277573d6000803e3d6000fd5b505050505b600354604080517f9f3cb655000000000000000000000000000000000000000000000000000000008152600e600482015261ffff90921660248301526001600160a01b03831660448301525173__IdToAddressBiMap______________________91639f3cb655916064808301926020929190829003018186803b1580156200030457600080fd5b505af415801562000319573d6000803e3d6000fd5b505050506040513d60208110156200033057600080fd5b50516200039e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015290519081900360640190fd5b600354604080516001600160a01b038416815261ffff909216602083015280517fe4b282c4351ffe36572a572de193a7de086edc47c9e62669fe6ab49fc53a33139281900390910190a1506003805461ffff8082166001011661ffff19909116179055565b615a7b80620004136000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806395466a4611610146578063e1d5f64e116100c3578063f36b635511610087578063f36b635514611217578063f3f479821461124f578063f47c84c51461127d578063f940e38514611285578063fb736d32146112b3578063ff97c626146112bb57610253565b8063e1d5f64e146111a1578063e48c015e146111a9578063e720ac8e146111b1578063ed2da357146111b9578063ef574d23146111f157610253565b8063c33eb9f61161010a578063c33eb9f6146110f4578063c49598fb14611122578063d48bfca714611145578063d4fac45d1461116b578063d73792a91461119957610253565b806395466a4614610c4c5780639bb0f59914610c845780639cc84ed314610cbe578063b3c0afa114610cfb578063c1ef283814610d4757610253565b80634bdc1b4c116101d457806372f3dd391161019857806372f3dd3914610b38578063793b8c6d14610b5e5780637fb47b0614610bde5780638e499bcf14610be6578063907767c014610c0557610253565b80634bdc1b4c146106cf57806361ed16d014610770578063647846a51461079457806365cc3e781461079c57806366367c1014610b1757610253565b80632f10d0821161021b5780632f10d08214610600578063397a1b281461063d57806341e383ed1461066b57806343383ac31461067357806347e7ef24146106a357610253565b8063094c7e191461025857806317569c1d1461027257806323d4a3c91461027a57806326c3d394146102f75780632e4c83bd14610345575b600080fd5b6102606112c3565b60408051918252519081900360200190f35b6102606112c8565b6102826112d5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102bc5781810151838201526020016102a4565b50505050905090810190601f1680156102e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610260600480360360a081101561030d57600080fd5b5061ffff813581169160208101359091169063ffffffff604082013516906001600160801b03606082013581169160800135166114bb565b610260600480360360e081101561035b57600080fd5b63ffffffff82351691602081013591810190606081016040820135600160201b81111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460208302840111600160201b831117156103ba57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561040957600080fd5b82018360208201111561041b57600080fd5b803590602001918460208302840111600160201b8311171561043c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561048b57600080fd5b82018360208201111561049d57600080fd5b803590602001918460208302840111600160201b831117156104be57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561050d57600080fd5b82018360208201111561051f57600080fd5b803590602001918460208302840111600160201b8311171561054057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561058f57600080fd5b8201836020820111156105a157600080fd5b803590602001918460208302840111600160201b831117156105c257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506114e0945050505050565b6106216004803603602081101561061657600080fd5b503561ffff16611f03565b604080516001600160a01b039092168252519081900360200190f35b6106696004803603604081101561065357600080fd5b506001600160a01b038135169060200135611f97565b005b610260611fad565b6102826004803603604081101561068957600080fd5b5080356001600160a01b0316906020013561ffff16611fb9565b610669600480360360408110156106b957600080fd5b506001600160a01b038135169060200135612223565b610669600480360360208110156106e557600080fd5b810190602081018135600160201b8111156106ff57600080fd5b82018360208201111561071157600080fd5b803590602001918460208302840111600160201b8311171561073257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612324945050505050565b6107786125a3565b604080516001600160801b039092168252519081900360200190f35b6106216125a9565b610ac7600480360360c08110156107b257600080fd5b810190602081018135600160201b8111156107cc57600080fd5b8201836020820111156107de57600080fd5b803590602001918460208302840111600160201b831117156107ff57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561084e57600080fd5b82018360208201111561086057600080fd5b803590602001918460208302840111600160201b8311171561088157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108d057600080fd5b8201836020820111156108e257600080fd5b803590602001918460208302840111600160201b8311171561090357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561095257600080fd5b82018360208201111561096457600080fd5b803590602001918460208302840111600160201b8311171561098557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156109d457600080fd5b8201836020820111156109e657600080fd5b803590602001918460208302840111600160201b83111715610a0757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610a5657600080fd5b820183602082011115610a6857600080fd5b803590602001918460208302840111600160201b83111715610a8957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506125be945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b03578181015183820152602001610aeb565b505050509050019250505060405180910390f35b61077860048036036020811015610b2d57600080fd5b503561ffff166126ac565b61028260048036036020811015610b4e57600080fd5b50356001600160a01b03166126c7565b610b8a60048036036040811015610b7457600080fd5b506001600160a01b0381351690602001356126d7565b6040805161ffff988916815296909716602087015263ffffffff948516868801529290931660608501526001600160801b03908116608085015291821660a08401521660c082015290519081900360e00190f35b610778612755565b610bee61275b565b6040805161ffff9092168252519081900360200190f35b610c3360048036036040811015610c1b57600080fd5b506001600160a01b0381358116916020013516612765565b6040805163ffffffff9092168252519081900360200190f35b61028260048036036060811015610c6257600080fd5b506001600160a01b038135169061ffff60208201358116916040013516612788565b610caa60048036036020811015610c9a57600080fd5b50356001600160a01b031661299b565b604080519115158252519081900360200190f35b610cc6612a00565b6040805163ffffffff90951685526001600160a01b039093166020850152838301919091526060830152519081900360800190f35b610d2960048036036040811015610d1157600080fd5b506001600160a01b0381358116916020013516612a24565b6040805192835263ffffffff90911660208301528051918290030190f35b610ac7600480360360e0811015610d5d57600080fd5b810190602081018135600160201b811115610d7757600080fd5b820183602082011115610d8957600080fd5b803590602001918460208302840111600160201b83111715610daa57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610df957600080fd5b820183602082011115610e0b57600080fd5b803590602001918460208302840111600160201b83111715610e2c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e7b57600080fd5b820183602082011115610e8d57600080fd5b803590602001918460208302840111600160201b83111715610eae57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610efd57600080fd5b820183602082011115610f0f57600080fd5b803590602001918460208302840111600160201b83111715610f3057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f7f57600080fd5b820183602082011115610f9157600080fd5b803590602001918460208302840111600160201b83111715610fb257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561100157600080fd5b82018360208201111561101357600080fd5b803590602001918460208302840111600160201b8311171561103457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561108357600080fd5b82018360208201111561109557600080fd5b803590602001918460208302840111600160201b831117156110b657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612a7e945050505050565b610d296004803603604081101561110a57600080fd5b506001600160a01b0381358116916020013516612aa3565b610caa6004803603602081101561113857600080fd5b503563ffffffff16612afd565b6106696004803603602081101561115b57600080fd5b50356001600160a01b0316612b31565b6102606004803603604081101561118157600080fd5b506001600160a01b0381358116916020013516612d56565b610778612e7f565b610778612e85565b610c33612e8a565b610c33612e90565b610282600480360360608110156111cf57600080fd5b506001600160a01b038135169061ffff60208201358116916040013516612e98565b610bee6004803603602081101561120757600080fd5b50356001600160a01b031661300e565b6106696004803603606081101561122d57600080fd5b5080356001600160a01b0316906020810135906040013563ffffffff16613073565b610caa6004803603604081101561126557600080fd5b506001600160a01b038135811691602001351661317a565b6102606131f2565b6106696004803603604081101561129b57600080fd5b506001600160a01b03813581169160200135166131f8565b6102606133ef565b6102606133f4565b606481565b61012c4281900690035b90565b60606000600c73__IterableAppendOnlySet_________________63d58c862c90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561132b57600080fd5b505af415801561133f573d6000803e3d6000fd5b505050506040513d602081101561135557600080fd5b505111156112d2576000600c73__IterableAppendOnlySet_________________6368fb2bc290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156113b157600080fd5b505af41580156113c5573d6000803e3d6000fd5b505050506040513d60208110156113db57600080fd5b5051905060005b806114b6576114006113f3836126c7565b849063ffffffff61342716565b600d549093506001600160a01b0383811691161415611421575060016114b1565b6040805163218777b360e21b8152600c60048201526001600160a01b0384166024820152905173__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b15801561148257600080fd5b505af4158015611496573d6000803e3d6000fd5b505050506040513d60208110156114ac57600080fd5b505191505b6113e2565b505090565b60006114d286866114ca612e90565b8787876134a4565b61ffff169695505050505050565b60006114eb88612afd565b6115265760405162461bcd60e51b815260040180806020018281038252602f8152602001806157f0602f913960400191505060405180910390fd5b61152f87613a10565b61156a5760405162461bcd60e51b815260040180806020018281038252603f81526020018061594b603f913960400191505060405180910390fd5b61157383613a43565b6115ae5760405162461bcd60e51b815260040180806020018281038252602c815260200180615864602c913960400191505060405180910390fd5b816000815181106115bb57fe5b602002602001015161ffff166000141561161c576040805162461bcd60e51b815260206004820152601a60248201527f46656520746f6b656e2068617320666978656420707269636521000000000000604482015290519081900360640190fd5b61162582613a9a565b6116605760405162461bcd60e51b81526004018080602001828103825260218152602001806159046021913960400191505060405180910390fd5b601e865111156116a15760405162461bcd60e51b815260040180806020018281038252602381526020018061574a6023913960400191505060405180910390fd5b60006116ab613af2565b90506116b5613b84565b6116bf8484613f53565b6116cb60076000615587565b60606116d684614041565b90506000805b8951811015611b24576116ed6155a8565b600460008c84815181106116fd57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208a838151811061173157fe5b602002602001015161ffff168154811061174757fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c082015290506117de818e614078565b611822576040805162461bcd60e51b815260206004820152601060248201526f13dc99195c881a5cc81a5b9d985b1a5960821b604482015290519081900360640190fd5b6000806118428b858151811061183457fe5b6020026020010151846140ab565b90925090506127106001600160801b03831610156118915760405162461bcd60e51b81526004018080602001828103825260238152602001806157276023913960400191505060405180910390fd5b6127106001600160801b03821610156118db5760405162461bcd60e51b81526004018080602001828103825260248152602001806159b36024913960400191505060405180910390fd5b825160208401516118f69188918c868663ffffffff6140f916565b806001600160801b0316611909846141ad565b6001600160801b0316101561194f5760405162461bcd60e51b81526004018080602001828103825260318152602001806158b26031913960400191505060405180910390fd5b60a0830151611970906001600160801b03848116911663ffffffff6141bc16565b6080840151611991906001600160801b03848116911663ffffffff6141bc16565b11156119e4576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974207072696365206e6f742073617469736669656400000000000000604482015290519081900360640190fd5b6119fe6119f18385614215565b869063ffffffff61434816565b9450611a318d8581518110611a0f57fe5b60200260200101518d8681518110611a2357fe5b6020026020010151836143a2565b611a648d8581518110611a4057fe5b6020026020010151611a558560000151611f03565b846001600160801b0316614539565b826020015161ffff168c8581518110611a7957fe5b602002602001015161ffff168e8681518110611a9157fe5b60200260200101516001600160a01b03167fafa5bc1fb80950b7cb2353ba0cf16a6d68de75801f2dac54b2dae9268450010a86600001518587604051808461ffff1661ffff168152602001836001600160801b03166001600160801b03168152602001826001600160801b03166001600160801b03168152602001935050505060405180910390a45050506001016116dc565b5060005b8951811015611c7e57611b396155a8565b600460008c8481518110611b4957fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208a8381518110611b7d57fe5b602002602001015161ffff1681548110611b9357fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c08201528a51909250611c3e908b9085908110611c3057fe5b6020026020010151836140ab565b915050611c748c8481518110611c5057fe5b6020026020010151611c658460200151611f03565b836001600160801b0316614599565b5050600101611b28565b506000805b8a51811015611da957611d9f611d92600460008e8581518110611ca257fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208c8481518110611cd657fe5b602002602001015161ffff1681548110611cec57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201528d518e9085908110611d8557fe5b6020026020010151614602565b839063ffffffff61434816565b9150600101611c83565b5060006002611db785614705565b81611dbe57fe5b0490506000611de383611dd7868563ffffffff61434816565b9063ffffffff61472316565b9050611dee81614765565b611df7826147ae565b611e00856147ca565b611e0d8e8d8d8d8c614899565b336001600160a01b03167f2140b6253bf38aea0a4ac9e9e6427b256e4035d60df4a85bb139ce975eb6b41d8585858a8e8e604051808781526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611e9a578181015183820152602001611e82565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611ed9578181015183820152602001611ec1565b505050509050019850505050505050505060405180910390a29d9c50505050505050505050505050565b60408051632ffeb2d760e21b8152600e600482015261ffff83166024820152905160009173__IdToAddressBiMap______________________9163bffacb5c91604480820192602092909190829003018186803b158015611f6357600080fd5b505af4158015611f77573d6000803e3d6000fd5b505050506040513d6020811015611f8d57600080fd5b505190505b919050565b611fa98282611fa4612e90565b613073565b5050565b678ac7230489e8000081565b6060600c73__IterableAppendOnlySet_________________63d58c862c90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561200d57600080fd5b505af4158015612021573d6000803e3d6000fd5b505050506040513d602081101561203757600080fd5b50516120425761221d565b6000836001600160a01b038116612118576040805163347d95e160e11b8152600c6004820152905173__IterableAppendOnlySet_________________916368fb2bc2916024808301926020929190829003018186803b1580156120a557600080fd5b505af41580156120b9573d6000803e3d6000fd5b505050506040513d60208110156120cf57600080fd5b5051604080516001600160601b0319606084901b16602082015281518082036014018152603490910190915290915061210f90849063ffffffff61342716565b92506001909101905b8361ffff168261ffff1610801561213d5750600d546001600160a01b03828116911614155b1561221a576040805163218777b360e21b8152600c60048201526001600160a01b0383166024820152905173__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b1580156121a357600080fd5b505af41580156121b7573d6000803e3d6000fd5b505050506040513d60208110156121cd57600080fd5b5051604080516001600160601b0319606084901b16602082015281518082036014018152603490910190915290915061220d90849063ffffffff61342716565b9250600190910190612118565b50505b92915050565b61222d33836149dc565b61223982333084614a9c565b336000908152602081815260408083206001600160a01b038616845290915290206001015461226e908263ffffffff61434816565b336000908152602081815260408083206001600160a01b038716845290915290206001015561229b612e90565b336000818152602081815260408083206001600160a01b0388168085529252909120600201805463ffffffff191663ffffffff94909416939093179092557fc11cc34e93c67a93382b99f2498e9937198798f3c1c2888008ffc0eeb82f68c483612303612e90565b6040805192835263ffffffff90911660208301528051918290030190a35050565b60006001612330612e90565b03905060005b82518161ffff16101561259e5733600090815260046020526040902083516124109190859061ffff851690811061236957fe5b602002602001015161ffff168154811061237f57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c082015283614078565b6124cc573360009081526004602052604090208351849061ffff841690811061243557fe5b602002602001015161ffff168154811061244b57fe5b60009182526020822060029091020180546001600160e01b031916815560010155825133907f7b0a9854603fbbe7606a58b70d113bd0d1ec8475f1b8cc9603c2d377e67835cd90859061ffff85169081106124a257fe5b6020026020010151604051808261ffff1661ffff16815260200191505060405180910390a2612596565b3360009081526004602052604090208351839190859061ffff85169081106124f057fe5b602002602001015161ffff168154811061250657fe5b906000526020600020906002020160000160086101000a81548163ffffffff021916908363ffffffff160217905550336001600160a01b03167f7a02963a37046835196f1a3185a036fd67cfca72283e46e4b3cdb99939851937848361ffff168151811061257057fe5b6020026020010151604051808261ffff1661ffff16815260200191505060405180910390a25b600101612336565b505050565b61271081565b6003546201000090046001600160a01b031681565b606086516040519080825280602002602001820160405280156125eb578160200160208202803883390190505b50905060005b87518110156126a15761267a88828151811061260957fe5b602002602001015188838151811061261d57fe5b602002602001015188848151811061263157fe5b602002602001015188858151811061264557fe5b602002602001015188868151811061265957fe5b602002602001015188878151811061266d57fe5b60200260200101516134a4565b82828151811061268657fe5b61ffff909216602092830291909101909101526001016125f1565b509695505050505050565b6005602052600090815260409020546001600160801b031681565b606061221d826000600019612e98565b600460205281600052604060002081815481106126f057fe5b60009182526020909120600290910201805460019091015461ffff808316945062010000830416925063ffffffff600160201b8304811692600160401b8104909116916001600160801b03600160601b90920482169181811691600160801b90041687565b60001981565b60035461ffff1681565b600160209081526000928352604080842090915290825290205463ffffffff1681565b6060600c73__IterableAppendOnlySet_________________63d58c862c90916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156127dc57600080fd5b505af41580156127f0573d6000803e3d6000fd5b505050506040513d602081101561280657600080fd5b505161281157612994565b82846001600160a01b0381166128a2576040805163347d95e160e11b8152600c6004820152905173__IterableAppendOnlySet_________________916368fb2bc2916024808301926020929190829003018186803b15801561287357600080fd5b505af4158015612887573d6000803e3d6000fd5b505050506040513d602081101561289d57600080fd5b505190505b825161ffff851690607090041015612991576128d86113f3828460706001600160801b03168751816128d057fe5b048803612e98565b600d549093506001600160a01b03828116911614156128f957506129949050565b6040805163218777b360e21b8152600c60048201526001600160a01b038316602482015290516000935073__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b15801561295e57600080fd5b505af4158015612972573d6000803e3d6000fd5b505050506040513d602081101561298857600080fd5b505190506128a2565b50505b9392505050565b60408051636e8930a360e11b8152600e60048201526001600160a01b0383166024820152905160009173__IdToAddressBiMap______________________9163dd12614691604480820192602092909190829003018186803b158015611f6357600080fd5b600654600954600a54600b5463ffffffff909316926001600160a01b039092169184565b600080612a2f6155e4565b5050506001600160a01b039182166000908152602081815260408083209390941682529182528290208251808401909352600181015480845260029091015463ffffffff169290910182905291565b6060612a8988612324565b612a978787878787876125be565b98975050505050505050565b600080612aae6155e4565b5050506001600160a01b039182166000908152602081815260408083209390941682529182528290208251808401909352600381015480845260049091015463ffffffff169290910182905291565b60006001612b09612e90565b0363ffffffff168263ffffffff1614801561221d5750603c612b296112c8565b101592915050565b60025460035461ffff1610612b82576040805162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b604482015290519081900360640190fd5b60035461ffff1615612c065760035460408051634417f4db60e01b8152336004820152678ac7230489e8000060248201529051620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b158015612bed57600080fd5b505af1158015612c01573d6000803e3d6000fd5b505050505b60035460408051639f3cb65560e01b8152600e600482015261ffff90921660248301526001600160a01b03831660448301525173__IdToAddressBiMap______________________91639f3cb655916064808301926020929190829003018186803b158015612c7457600080fd5b505af4158015612c88573d6000803e3d6000fd5b505050506040513d6020811015612c9e57600080fd5b5051612cf1576040805162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015290519081900360640190fd5b600354604080516001600160a01b038416815261ffff909216602083015280517fe4b282c4351ffe36572a572de193a7de086edc47c9e62669fe6ab49fc53a33139281900390910190a1506003805461ffff8082166001011661ffff19909116179055565b6001600160a01b03808316600090815260208181526040808320938516835292905290812054612d84612e90565b6001600160a01b038086166000908152602081815260408083209388168352929052206002015463ffffffff91821691161015612df6576001600160a01b0380851660009081526020818152604080832093871683529290522060010154612df390829063ffffffff61434816565b90505b612dfe612e90565b6001600160a01b038086166000908152602081815260408083209388168352929052206004015463ffffffff91821691161015612994576001600160a01b0380851660009081526020818152604080832093871683529290522060030154612e7790612e6a9083614afc565b829063ffffffff61472316565b949350505050565b6103e881565b607081565b61012c81565b61012c420490565b6060825b6001600160a01b038516600090815260046020526040902054612ec59061ffff86860116614afc565b8161ffff16101561300657612ffc612fef86612f3788612f32600460008c6001600160a01b03166001600160a01b031681526020019081526020016000208761ffff1681548110612f1257fe5b600091825260209091206002909102015462010000900461ffff16611f03565b612d56565b6001600160a01b0389166000908152600460205260409020805461ffff8716908110612f5f57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c0820152614b12565b839063ffffffff61342716565b9150600101612e9c565b509392505050565b6040805163b3129e1f60e01b8152600e60048201526001600160a01b0383166024820152905160009173__IdToAddressBiMap______________________9163b3129e1f91604480820192602092909190829003018186803b158015611f6357600080fd5b61307d338461317a565b1561308c5761308c33846131f8565b613094612e90565b63ffffffff168163ffffffff1610156130de5760405162461bcd60e51b8152600401808060200182810382526022815260200180615a256022913960400191505060405180910390fd5b60408051808201825283815263ffffffff83811660208084018281523360008181528084528781206001600160a01b038c16808352908552908890209651600388015591516004909601805463ffffffff19169690951695909517909355845187815290810191909152835191937f2c6245af506f0fc1089918c02c1d01bde9cc807609b334b3e7644d6dfb5a6c5e92918290030190a3505050565b6000613184612e90565b6001600160a01b038085166000908152602081815260408083209387168352929052206004015463ffffffff91821691161080156129945750506001600160a01b0391821660009081526020818152604080832093909416825291909152206004015463ffffffff16151590565b60025481565b61320282826149dc565b61320a612e90565b6001600160a01b038084166000908152602081815260408083209386168352929052206004015463ffffffff9182169116106132775760405162461bcd60e51b81526004018080602001828103825260268152602001806159256026913960400191505060405180910390fd5b61327f612e90565b6001600160a01b0380841660009081526001602090815260408083209386168352929052205463ffffffff9182169116106132eb5760405162461bcd60e51b815260040180806020018281038252604581526020018061581f6045913960600191505060405180910390fd5b6001600160a01b03828116600090815260208181526040808320938516835292905290812080546003909101546133229190614afc565b6001600160a01b0380851660009081526020818152604080832093871683529290522054909150613359908263ffffffff61472316565b6001600160a01b0384811660009081526020818152604080832093871683529290529081209182556003820155600401805463ffffffff1916905561339f828483614d49565b816001600160a01b0316836001600160a01b03167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040518082815260200191505060405180910390a3505050565b601e81565b60006001613400612e90565b60065463ffffffff9081169290910316141561341f5750600b546112d2565b5060006112d2565b6060806040519050835180825260208201818101602087015b81831015613458578051835260209283019201613440565b50855184518101855292509050808201602086015b8183101561348557805183526020928301920161346d565b508651929092011591909101601f01601f191660405250905092915050565b6040805163ab8978b760e01b8152600e600482015261ffff88166024820152905160009173__IdToAddressBiMap______________________9163ab8978b791604480820192602092909190829003018186803b15801561350457600080fd5b505af4158015613518573d6000803e3d6000fd5b505050506040513d602081101561352e57600080fd5b5051613581576040805162461bcd60e51b815260206004820152601860248201527f42757920746f6b656e206d757374206265206c69737465640000000000000000604482015290519081900360640190fd5b6040805163ab8978b760e01b8152600e600482015261ffff88166024820152905173__IdToAddressBiMap______________________9163ab8978b7916044808301926020929190829003018186803b1580156135dd57600080fd5b505af41580156135f1573d6000803e3d6000fd5b505050506040513d602081101561360757600080fd5b505161365a576040805162461bcd60e51b815260206004820152601960248201527f53656c6c20746f6b656e206d757374206265206c697374656400000000000000604482015290519081900360640190fd5b8561ffff168761ffff1614156136b7576040805162461bcd60e51b815260206004820152601c60248201527f45786368616e676520746f6b656e73206e6f742064697374696e637400000000604482015290519081900360640190fd5b6136bf612e90565b63ffffffff168563ffffffff1610156137095760405162461bcd60e51b81526004018080602001828103825260228152602001806158906022913960400191505060405180910390fd5b60046000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060e001604052808961ffff1681526020018861ffff1681526020018763ffffffff1681526020018663ffffffff168152602001856001600160801b03168152602001846001600160801b0316815260200160006001600160801b03168152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555060408201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600c6101000a8154816001600160801b0302191690836001600160801b0316021790555060a08201518160010160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160010160106101000a8154816001600160801b0302191690836001600160801b031602179055505050506000613910600160046000336001600160a01b03166001600160a01b031681526020019081526020016000208054905003614d9b565b6040805161ffff808416825263ffffffff808b1660208401528916828401526001600160801b038089166060840152871660808301529151929350818a1692918b169133917fdecf6fde8243981299f7b7a776f29a9fc67a2c9848e25d77c50eb11fa58a7e21919081900360a00190a460408051634743bd0360e11b8152600c6004820152336024820152905173__IterableAppendOnlySet_________________91638e877a06916044808301926020929190829003018186803b1580156139d857600080fd5b505af41580156139ec573d6000803e3d6000fd5b505050506040513d6020811015613a0257600080fd5b509098975050505050505050565b6000613a2b6065613a1f6133f4565b9063ffffffff6141bc16565b613a3c83606463ffffffff6141bc16565b1192915050565b6000805b8251811015613a91576127106001600160801b0316838281518110613a6857fe5b60200260200101516001600160801b03161015613a89576000915050611f92565b600101613a47565b50600192915050565b600060015b8251811015613a9157826001820381518110613ab757fe5b602002602001015161ffff16838281518110613acf57fe5b602002602001015161ffff1611613aea576000915050611f92565b600101613a9f565b6000613afc614de2565b613b7e57600354600a5460408051634417f4db60e01b8152306004820152602481019290925251620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b158015613b5b57600080fd5b505af1158015613b6f573d6000803e3d6000fd5b5050600a5492506112d2915050565b50600090565b613b8c614de2565b15613f515760005b600754811015613d2157600060066001018281548110613bb057fe5b60009182526020822060029091020154600780546001600160a01b0390921693509084908110613bdc57fe5b906000526020600020906002020160010160109054906101000a900461ffff169050613c066155a8565b6001600160a01b0383166000908152600460205260409020805461ffff8416908110613c2e57fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c082015260078054919350613cee9187908110613ccb57fe5b60009182526020909120600160029092020101546001600160801b0316836140ab565b915050613d1184613d028460200151611f03565b836001600160801b0316614e04565b505060019092019150613b949050565b5060005b600754811015613f2e57600060066001018281548110613d4157fe5b60009182526020822060029091020154600780546001600160a01b0390921693509084908110613d6d57fe5b906000526020600020906002020160010160109054906101000a900461ffff169050613d976155a8565b6001600160a01b0383166000908152600460205260409020805461ffff8416908110613dbf57fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c0820152600780549193508291613e82919088908110613e5f57fe5b60009182526020909120600160029092020101546001600160801b0316846140ab565b91509150613e91858583614e71565b613eb185613ea28560000151611f03565b846001600160801b0316614f11565b60208084015184516040805161ffff92831681526001600160801b0380871695820195909552938616848201525191811692908716916001600160a01b038916917fb7214f648cea2a7c47aaea7e7aafef610de8d04366d26f66879d076516964eae919081900360600190a4505060019093019250613d25915050565b50600954613f51906001600160a01b0316613f496000611f03565b600a54614f11565b565b60005b600854811015613fcc5760006005600060066002018481548110613f7657fe5b60009182526020808320601083040154600f9092166002026101000a90910461ffff168352820192909252604001902080546001600160801b0319166001600160801b0392909216919091179055600101613f56565b5060005b815181101561259e57828181518110613fe557fe5b602002602001015160056000848481518110613ffd57fe5b60209081029190910181015161ffff16825281019190915260400160002080546001600160801b0319166001600160801b0392909216919091179055600101613fd0565b60608151600101604051908082528060200260200182016040528015614071578160200160208202803883390190505b5092915050565b60008163ffffffff16836040015163ffffffff161115801561299457505060609091015163ffffffff9182169116101590565b805161ffff908116600090815260056020908152604080832054918501519093168252918120549091829182916140f09187916001600160801b039081169116614f4f565b94959350505050565b60006141058685614f86565b905060006141138686614f86565b9050614144846001600160801b031689848151811061412e57fe5b602002602001015161506c90919063ffffffff16565b88838151811061415057fe5b60200260200101818152505061418b836001600160801b031689838151811061417557fe5b60200260200101516150d190919063ffffffff16565b88828151811061419757fe5b6020026020010181815250505050505050505050565b60c081015160a0909101510390565b6000826141cb5750600061221d565b828202828482816141d857fe5b04146129945760405162461bcd60e51b81526004018080602001828103825260218152602001806158e36021913960400191505060405180910390fd5b6080810151815161ffff908116600090815260056020908152604080832054918601519093168252918120549092839261427a926001600160801b03928316926142659289929082169116614f4f565b6001600160801b03169063ffffffff6141bc16565b835161ffff1660009081526005602052604081205460a086015192935090916142d5916001600160801b0390811691613a1f916142bf9187911663ffffffff61513616565b6001600160801b0389169063ffffffff61472316565b60a085018051865161ffff1660009081526005602052604081205492519394509261432c926001600160801b03928316926143209291811691613a1f9189911663ffffffff61517816565b9063ffffffff61513616565b905061433e828263ffffffff61472316565b9695505050505050565b600082820183811015612994576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600460205260409020805461445f919061ffff85169081106143cf57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201526151ba565b1561259e576144d76144d2826001600160801b031660046000876001600160a01b03166001600160a01b031681526020019081526020016000208561ffff16815481106144a857fe5b6000918252602090912060029091020160010154600160801b90046001600160801b031690614348565b6151f4565b6001600160a01b0384166000908152600460205260409020805461ffff85169081106144ff57fe5b906000526020600020906002020160010160106101000a8154816001600160801b0302191690836001600160801b03160217905550505050565b614543838361317a565b1561458e57614550612e90565b6001600160a01b038481166000908152600160209081526040808320938716835292905220805463ffffffff191663ffffffff929092169190911790555b61259e838383614e04565b6145a38383612d56565b8111156145f7576040805162461bcd60e51b815260206004820152601e60248201527f416d6f756e742065786365656473207573657227732062616c616e63652e0000604482015290519081900360640190fd5b61259e838383614f11565b600080614630614611856141ad565b6001600160801b031661462b85612f328860200151611f03565b614afc565b60a085015160208087015161ffff166000908152600590915260408120549293509161466e916001600160801b03918216911663ffffffff6141bc16565b855161ffff16600090815260056020526040812054608088015192935090916146b9916103e791614320916103e891613a1f916001600160801b03918216911663ffffffff6141bc16565b90506000818311156146d8576146d5838363ffffffff61472316565b90505b60a08701516146fa906001600160801b0316614320868463ffffffff6141bc16565b979650505050505050565b60008160008151811061471457fe5b60200260200101519050919050565b600061299483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615238565b61476e81613a10565b6147a95760405162461bcd60e51b815260040180806020018281038252603b81526020018061576d603b913960400191505060405180910390fd5b600b55565b600a8190556147c7336147c16000611f03565b83614539565b50565b6000816000815181106147d957fe5b60200260200101511361481d5760405162461bcd60e51b815260040180806020018281038252602981526020018061598a6029913960400191505060405180910390fd5b60015b8151811015611fa95781818151811061483557fe5b6020026020010151600014614891576040805162461bcd60e51b815260206004820181905260248201527f546f6b656e20636f6e736572766174696f6e20646f6573206e6f7420686f6c64604482015290519081900360640190fd5b600101614820565b6006805463ffffffff191663ffffffff871617905560005b84518110156149ae57600660010160405180606001604052808784815181106148d657fe5b60200260200101516001600160a01b031681526020018584815181106148f857fe5b60200260200101516001600160801b0316815260200186848151811061491a57fe5b60209081029190910181015161ffff908116909252835460018082018655600095865294829020845160029092020180546001600160a01b0319166001600160a01b039092169190911781559083015190840180546040909401516001600160801b03199094166001600160801b039092169190911761ffff60801b1916600160801b9390921692909202179055016148b1565b5080516149c29060089060208401906155fb565b5050600980546001600160a01b0319163317905550505050565b6001600160a01b038083166000908152602081815260408083209385168352929052206002015463ffffffff168015801590614a245750614a1b612e90565b63ffffffff1681105b1561259e576001600160a01b0383811660009081526020818152604080832093861683529290522060018101549054614a5c91614348565b6001600160a01b0393841660009081526020818152604080832095909616825293909352928220928355506001820155600201805463ffffffff19169055565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052614af69085906152cf565b50505050565b6000818310614b0b5781612994565b5090919050565b604080516001600160601b0319606086901b166020820152815180820360140181526034820183526054808301869052835180840390910181526074909201909252614b6590829063ffffffff61342716565b82516040805160f09290921b6001600160f01b03191660208301528051600281840301815260229092019052909150614b9f908290613427565b9050614be28260200151604051602001808261ffff1661ffff1660f01b81526002019150506040516020818303038152906040528261342790919063ffffffff16565b9050614c298260400151604051602001808263ffffffff1663ffffffff1660e01b81526004019150506040516020818303038152906040528261342790919063ffffffff16565b9050614c708260600151604051602001808263ffffffff1663ffffffff1660e01b81526004019150506040516020818303038152906040528261342790919063ffffffff16565b9050614cbd826080015160405160200180826001600160801b03166001600160801b031660801b81526010019150506040516020818303038152906040528261342790919063ffffffff16565b9050614d0a8260a0015160405160200180826001600160801b03166001600160801b031660801b81526010019150506040516020818303038152906040528261342790919063ffffffff16565b9050612e77614d18836141ad565b6040805160809290921b6001600160801b031916602083015280516010818403018152603090920190528290613427565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261259e9084906152cf565b6000620100008210614dde5760405162461bcd60e51b81526004018080602001828103825260268152602001806157016026913960400191505060405180910390fd5b5090565b60006001614dee612e90565b60065463ffffffff908116929091031614905090565b614e0e83836149dc565b6001600160a01b0380841660009081526020818152604080832093861683529290522054614e42908263ffffffff61434816565b6001600160a01b0393841660009081526020818152604080832095909616825293909352929091209190915550565b6001600160a01b03831660009081526004602052604090208054614e9e919061ffff85169081106143cf57fe5b1561259e576144d76144d2826001600160801b031660046000876001600160a01b03166001600160a01b031681526020019081526020016000208561ffff1681548110614ee757fe5b6000918252602090912060029091020160010154600160801b90046001600160801b031690614723565b614f1b83836149dc565b6001600160a01b0380841660009081526020818152604080832093861683529290522054614e42908263ffffffff61472316565b6000612e776144d26001600160801b0380851690614320906103e890613a1f906103e79084908c8116908c1663ffffffff6141bc16565b600061ffff8316614f995750600061221d565b8151600090600019015b81811061501f57600060028383010490508561ffff16858281518110614fc557fe5b602002602001015161ffff161415614fe457600101925061221d915050565b8561ffff16858281518110614ff557fe5b602002602001015161ffff16101561501257806001019250615019565b6001810391505b50614fa3565b6040805162461bcd60e51b815260206004820152601c60248201527f5072696365206e6f742070726f766964656420666f7220746f6b656e00000000604482015290519081900360640190fd5b60008183038183128015906150815750838113155b80615096575060008312801561509657508381135b6129945760405162461bcd60e51b81526004018080602001828103825260248152602001806159d76024913960400191505060405180910390fd5b60008282018183128015906150e65750838112155b806150fb57506000831280156150fb57508381125b6129945760405162461bcd60e51b81526004018080602001828103825260218152602001806157cf6021913960400191505060405180910390fd5b600061299483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615487565b600061299483836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506154ec565b60006000196001600160801b031682608001516001600160801b03161415801561221d57505060a001516001600160801b03908116141590565b6000600160801b8210614dde5760405162461bcd60e51b81526004018080602001828103825260278152602001806157a86027913960400191505060405180910390fd5b600081848411156152c75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561528c578181015183820152602001615274565b50505050905090810190601f1680156152b95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6152e1826001600160a01b031661554e565b615332576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106153705780518252601f199092019160209182019101615351565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146153d2576040519150601f19603f3d011682016040523d82523d6000602084013e6153d7565b606091505b50915091508161542e576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115614af65780806020019051602081101561544a57600080fd5b5051614af65760405162461bcd60e51b815260040180806020018281038252602a8152602001806159fb602a913960400191505060405180910390fd5b600081836154d65760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561528c578181015183820152602001615274565b5060008385816154e257fe5b0495945050505050565b6000818361553b5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561528c578181015183820152602001615274565b5082848161554557fe5b06949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612e77575050151592915050565b50805460008255600202906000526020600020908101906147c791906156a0565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b82805482825590600052602060002090600f016010900481019282156156945791602002820160005b8382111561566457835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302615624565b80156156925782816101000a81549061ffff0219169055600201602081600101049283019260010302615664565b505b50614dde9291506156e1565b6112d291905b80821115614dde5780546001600160a01b031916815560018101805471ffffffffffffffffffffffffffffffffffff191690556002016156a6565b6112d291905b80821115614dde57805461ffff191681556001016156e756fe53616665436173743a2076616c756520646f65736e27742066697420696e203136206269747362757920616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d536f6c7574696f6e2065786365656473204d41585f544f55434845445f4f52444552534e6577206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e53616665436173743a2076616c756520646f65736e27742066697420696e2031323820626974735369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77536f6c7574696f6e7320617265206e6f206c6f6e67657220616363657074656420666f7220746869732062617463685769746864726177206e6f7420706f737369626c6520666f7220746f6b656e20746861742069732074726164656420696e207468652063757272656e742061756374696f6e4174206c65617374206f6e65207072696365206c6f776572207468616e20414d4f554e545f4d494e494d554d4f72646572732063616e277420626520706c6163656420696e207468652070617374657865637574656453656c6c416d6f756e7420626967676572207468616e2073706563696669656420696e206f72646572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7770726963657320617265206e6f74206f72646572656420627920746f6b656e4964776974686472617720776173206e6f7420726567697374657265642070726576696f75736c79436c61696d6564206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e546f6b656e20636f6e736572766174696f6e2061742030206d75737420626520706f7369746976652e73656c6c20616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564526571756573742063616e6e6f74206265206d61646520696e207468652070617374a265627a7a72305820ef930eadc435b27eb61c0fe686f1cdc1ef5f123e915c54fbed4431957644191064736f6c634300050a0032","contractName":"BatchExchange","devdoc":{"author":"@gnosis/dfusion-team ","methods":{"addToken(address)":{"details":"Used to list a new token on the contract: Hence, making it available for exchange in an auction.","params":{"token":"ERC20 token to be listed. * Requirements: - `maxTokens` has not already been reached - `token` has not already been added"}},"cancelOrders(uint16[])":{"details":"a user facing function used to cancel orders. If the order is valid for the batch that is currently being solved, it sets order expiry to that batchId. Otherwise it removes it from storage. Can be called multiple times (e.g. to eventually free storage once order is expired).","params":{"orderIds":"referencing the indices of user's orders to be cancelled * Emits an {OrderCancellation} or {OrderDeletion} with sender's address and orderId"}},"constructor":{"details":"Constructor determines exchange parameters","params":{"_feeToken":"Address of ERC20 fee token.","maxTokens":"The maximum number of tokens that can be listed."}},"deposit(address,uint256)":{"details":"credits user with deposit amount on next epoch (given by getCurrentBatchId)","params":{"amount":"number of token(s) to be credited to user's account * Emits an {Deposit} event with relevent deposit information. * Requirements: - token transfer to contract is successfull","token":"address of token to be deposited"}},"getBalance(address,address)":{"details":"fetches and returns user's balance","params":{"token":"address of ERC20 token return Current `token` balance of `user`'s account","user":"address of user"}},"getCurrentBatchId()":{"details":"getter function to determine current auction id. return current batchId"},"getCurrentObjectiveValue()":{"details":"gets the objective value of currently winning solution.","return":"objective function evaluation of the currently winning solution, or zero if no solution proposed."},"getEncodedOrders()":{"details":"View returning all byte-encoded sell orders","return":"encoded bytes representing all orders ordered by (user, index)"},"getEncodedUserOrders(address)":{"details":"View returning all byte-encoded sell orders for specified user","params":{"user":"address of user whose orders are being queried"},"return":"encoded bytes representing all orders"},"getEncodedUserOrdersPaginated(address,uint16,uint16)":{"details":"View returning all byte-encoded sell orders for specified user","params":{"offset":"uint determining the starting orderIndex","pageSize":"uint determining the count of elements to be viewed","user":"address of user whose orders are being queried"},"return":"encoded bytes representing all orders"},"getEncodedUsersPaginated(address,uint16,uint16)":{"details":"View returning byte-encoded sell orders in paginated form","params":{"pageSize":"uint determining the count of orders to be returned per page","previousPageUser":"address of last user received in the previous page (address(0) for first page)","previousPageUserOffset":"the number of orders received for the last user on the previous page (0 for first page)."},"return":"encoded bytes representing a page of orders ordered by (user, index)"},"getPendingDeposit(address,address)":{"details":"getter function used to display pending deposit","params":{"token":"address of ERC20 token return amount and batchId of deposit's transfer if any (else 0)","user":"address of user"}},"getPendingWithdraw(address,address)":{"details":"getter function used to display pending withdraw","params":{"token":"address of ERC20 token return amount and batchId when withdraw was requested if any (else 0)","user":"address of user"}},"getSecondsRemainingInBatch()":{"details":"used to determine how much time is left in a batch return seconds remaining in current batch"},"getUsersPaginated(address,uint16)":{"details":"View returning all byte-encoded users in paginated form","params":{"pageSize":"uint determining the count of users to be returned per page","previousPageUser":"address of last user received in last pages (address(0) for first page)"},"return":"encoded packed bytes of user addresses"},"hasToken(address)":{"details":"View returning a bool attesting whether token was already added","params":{"addr":"address of the token to be checked"},"return":"bool attesting whether token was already added"},"hasValidWithdrawRequest(address,address)":{"details":"Used to determine if user has a valid pending withdraw request of specific token","params":{"token":"address of ERC20 token return true if `user` has valid withdraw request for `token`, otherwise false","user":"address of user"}},"placeOrder(uint16,uint16,uint32,uint128,uint128)":{"details":"A user facing function used to place limit sell orders in auction with expiry defined by batchId","params":{"buyAmount":"relative minimum amount of requested buy amount","buyToken":"id of token to be bought","sellAmount":"maximum amount of sell token to be exchanged","sellToken":"id of token to be sold","validUntil":"batchId representing order's expiry"},"return":"orderId defined as the index in user's order array * Emits an {OrderPlacement} event with all relevant order details."},"placeValidFromOrders(uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])":{"details":"A user facing function used to place limit sell orders in auction with expiry defined by batchId Note that parameters are passed as arrays and the indices correspond to each order.","params":{"buyAmounts":"relative minimum amount of requested buy amounts","buyTokens":"ids of tokens to be bought","sellAmounts":"maximum amounts of sell token to be exchanged","sellTokens":"ids of tokens to be sold","validFroms":"batchIds representing order's validity start time","validUntils":"batchIds representing order's expiry"},"return":"`orderIds` an array of indices in which `msg.sender`'s orders are included * Emits an {OrderPlacement} event with all relevant order details."},"replaceOrders(uint16[],uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])":{"details":"A user facing wrapper to cancel and place new orders in the same transaction.","params":{"buyAmounts":"relative minimum amount of requested buy amounts in new orders","buyTokens":"ids of tokens to be bought in new orders","cancellations":"indices of orders to be cancelled","sellAmounts":"maximum amounts of sell token to be exchanged in new orders","sellTokens":"ids of tokens to be sold in new orders","validFroms":"batchIds representing order's validity start time in new orders","validUntils":"batchIds represnnting order's expiry in new orders"},"return":"an array of indices in which `msg.sender`'s new orders are included * Emits {OrderCancellation} events for all cancelled orders and {OrderPlacement} events with relevant new order details."},"requestFutureWithdraw(address,uint256,uint32)":{"details":"Signals and initiates user's intent to withdraw.","params":{"amount":"number of token(s) to be withdrawn","batchId":"state index at which request is to be made. * Emits an {WithdrawRequest} event with relevent request information.","token":"address of token to be withdrawn"}},"requestWithdraw(address,uint256)":{"details":"Signals and initiates user's intent to withdraw.","params":{"amount":"number of token(s) to be withdrawn * Emits an {WithdrawRequest} event with relevent request information.","token":"address of token to be withdrawn"}},"submitSolution(uint32,uint256,address[],uint16[],uint128[],uint128[],uint16[])":{"details":"a solver facing function called for auction settlement","params":{"batchId":"index of auction solution is referring to","buyVolumes":"executed buy amounts for each order identified by index of owner-orderId arrays","orderIds":"array of order indices used in parallel with owners to identify touched order","owners":"array of addresses corresponding to touched orders","prices":"list of prices for touched tokens indexed by next parameter","tokenIdsForPrice":"price[i] is the price for the token with tokenID tokenIdsForPrice[i]"},"return":"the computed objective value of the solution * Requirements: - Solutions for this `batchId` are currently being accepted. - Claimed objetive value is a great enough improvement on the current winning solution - Fee Token price is non-zero - `tokenIdsForPrice` is sorted. - Number of touched orders does not exceed `MAX_TOUCHED_ORDERS`. - Each touched order is valid at current `batchId`. - Each touched order's `executedSellAmount` does not exceed its remaining amount. - Limit Price of each touched order is respected. - Solution's objective evaluation must be positive. * Sub Requirements: Those nested within other functions - checkAndOverrideObjectiveValue; Objetive value is a great enough improvement on the current winning solution - checkTokenConservation; for all, non-fee, tokens total amount sold == total amount bought"},"tokenAddressToIdMap(address)":{"details":"View returning ID of listed tokens","params":{"addr":"address of listed token."},"return":"tokenId as stored within the contract."},"tokenIdToAddressMap(uint16)":{"details":"View returning address of listed token by ID","params":{"id":"tokenId as stored, via BiMap, within the contract."},"return":"address of (listed) token"},"withdraw(address,address)":{"details":"Claims pending withdraw - can be called on behalf of others","params":{"token":"address of token to be withdrawn","user":"address of user who withdraw is being claimed. * Emits an {Withdraw} event stating that `user` withdrew `amount` of `token` * Requirements: - withdraw was requested in previous epoch - token was received from exchange in current auction batch"}}},"title":"BatchExchange - A decentralized exchange for any ERC20 token as a multi-token batch auction with uniform clearing prices. For more information visit: "},"networks":{"1":{"address":"0x6F400810b62df8E13fded51bE75fF5393eaa841F","links":{"IdToAddressBiMap":"0xED4d05496C71e71cC2A8726af1242C22108d1761","IterableAppendOnlySet":"0xCDDB32b6Bb2808D5B5115dAab207479cE98d2636"},"transactionHash":"0xe74e8e965afc67f96a38caee794f008be33a7fe7ea96b9baad7b2963250ac36a"},"4":{"address":"0xC576eA7bd102F7E476368a5E98FA455d1Ea34dE2","links":{"IdToAddressBiMap":"0x5c4C6bf91240A5fdBfB9a1BEd8d43227046e2feA","IterableAppendOnlySet":"0x0D47D0548FDAD66B06E81a826EED8c687aCddBCB"},"transactionHash":"0xc5bf4f48747093a79b623c2a2392ccbdb73a3d788e7d1f0f53f640ea18496d90"}},"userdoc":{"methods":{}}} \ No newline at end of file +{"abi":[{"constant":true,"inputs":[],"name":"IMPROVEMENT_DENOMINATOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getSecondsRemainingInBatch","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"requestWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FEE_FOR_LISTING_TOKEN_IN_OWL","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"AMOUNT_MINIMUM","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"}],"name":"currentPrices","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"orders","outputs":[{"name":"buyToken","type":"uint16"},{"name":"sellToken","type":"uint16"},{"name":"validFrom","type":"uint32"},{"name":"validUntil","type":"uint32"},{"name":"priceNumerator","type":"uint128"},{"name":"priceDenominator","type":"uint128"},{"name":"usedAmount","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNLIMITED_ORDER_AMOUNT","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numTokens","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"lastCreditBatchId","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"latestSolution","outputs":[{"name":"batchId","type":"uint32"},{"name":"solutionSubmitter","type":"address"},{"name":"feeReward","type":"uint256"},{"name":"objectiveValue","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"getPendingDeposit","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"getPendingWithdraw","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ENCODED_AUCTION_ELEMENT_WIDTH","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"BATCH_TIME","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentBatchId","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"amount","type":"uint256"},{"name":"batchId","type":"uint32"}],"name":"requestFutureWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"hasValidWithdrawRequest","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOKENS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"user","type":"address"},{"name":"token","type":"address"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_TOUCHED_ORDERS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"maxTokens","type":"uint256"},{"name":"_feeToken","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"index","type":"uint16"},{"indexed":true,"name":"buyToken","type":"uint16"},{"indexed":true,"name":"sellToken","type":"uint16"},{"indexed":false,"name":"validFrom","type":"uint32"},{"indexed":false,"name":"validUntil","type":"uint32"},{"indexed":false,"name":"priceNumerator","type":"uint128"},{"indexed":false,"name":"priceDenominator","type":"uint128"}],"name":"OrderPlacement","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"id","type":"uint16"}],"name":"TokenListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"id","type":"uint16"}],"name":"OrderCancellation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"id","type":"uint16"}],"name":"OrderDeletion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"orderId","type":"uint16"},{"indexed":true,"name":"sellToken","type":"uint16"},{"indexed":false,"name":"buyToken","type":"uint16"},{"indexed":false,"name":"executedSellAmount","type":"uint128"},{"indexed":false,"name":"executedBuyAmount","type":"uint128"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"orderId","type":"uint16"},{"indexed":true,"name":"sellToken","type":"uint16"},{"indexed":false,"name":"buyToken","type":"uint16"},{"indexed":false,"name":"executedSellAmount","type":"uint128"},{"indexed":false,"name":"executedBuyAmount","type":"uint128"}],"name":"TradeReversion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"submitter","type":"address"},{"indexed":false,"name":"utility","type":"uint256"},{"indexed":false,"name":"disregardedUtility","type":"uint256"},{"indexed":false,"name":"burntFees","type":"uint256"},{"indexed":false,"name":"lastAuctionBurntFees","type":"uint256"},{"indexed":false,"name":"prices","type":"uint128[]"},{"indexed":false,"name":"tokenIdsForPrice","type":"uint16[]"}],"name":"SolutionSubmission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"batchId","type":"uint32"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"batchId","type":"uint32"}],"name":"WithdrawRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"constant":false,"inputs":[{"name":"token","type":"address"}],"name":"addToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"buyToken","type":"uint16"},{"name":"sellToken","type":"uint16"},{"name":"validUntil","type":"uint32"},{"name":"buyAmount","type":"uint128"},{"name":"sellAmount","type":"uint128"}],"name":"placeOrder","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"buyTokens","type":"uint16[]"},{"name":"sellTokens","type":"uint16[]"},{"name":"validFroms","type":"uint32[]"},{"name":"validUntils","type":"uint32[]"},{"name":"buyAmounts","type":"uint128[]"},{"name":"sellAmounts","type":"uint128[]"}],"name":"placeValidFromOrders","outputs":[{"name":"orderIds","type":"uint16[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"orderIds","type":"uint16[]"}],"name":"cancelOrders","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"cancellations","type":"uint16[]"},{"name":"buyTokens","type":"uint16[]"},{"name":"sellTokens","type":"uint16[]"},{"name":"validFroms","type":"uint32[]"},{"name":"validUntils","type":"uint32[]"},{"name":"buyAmounts","type":"uint128[]"},{"name":"sellAmounts","type":"uint128[]"}],"name":"replaceOrders","outputs":[{"name":"","type":"uint16[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"batchId","type":"uint32"},{"name":"claimedObjectiveValue","type":"uint256"},{"name":"owners","type":"address[]"},{"name":"orderIds","type":"uint16[]"},{"name":"buyVolumes","type":"uint128[]"},{"name":"prices","type":"uint128[]"},{"name":"tokenIdsForPrice","type":"uint16[]"}],"name":"submitSolution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"tokenAddressToIdMap","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"id","type":"uint16"}],"name":"tokenIdToAddressMap","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"hasToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"},{"name":"offset","type":"uint16"},{"name":"pageSize","type":"uint16"}],"name":"getEncodedUserOrdersPaginated","outputs":[{"name":"elements","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"previousPageUser","type":"address"},{"name":"pageSize","type":"uint16"}],"name":"getUsersPaginated","outputs":[{"name":"users","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"user","type":"address"}],"name":"getEncodedUserOrders","outputs":[{"name":"elements","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"pageSize","type":"uint16"}],"name":"getEncodedUsersPaginated","outputs":[{"name":"elements","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getEncodedOrders","outputs":[{"name":"elements","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"batchId","type":"uint32"}],"name":"acceptingSolutions","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentObjectiveValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}],"bytecode":"0x60806040523480156200001157600080fd5b5060405162005d4d38038062005d4d833981810160405260408110156200003757600080fd5b5080516020918201516000808052600584527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc80546001600160801b031916670de0b6b3a76400001790556002839055600380546001600160a01b038085166201000090810262010000600160b01b03199093169290921792839055604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152306004820152600019602482015290519697959692909304169363095ea7b3936044808501949293928390030190829087803b1580156200011a57600080fd5b505af11580156200012f573d6000803e3d6000fd5b505050506040513d60208110156200014657600080fd5b506200015d9050816001600160e01b036200016516565b505062000403565b60025460035461ffff1610620001dc57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d617820746f6b656e7320726561636865640000000000000000000000000000604482015290519081900360640190fd5b60035461ffff16156200027c57600354604080517f4417f4db000000000000000000000000000000000000000000000000000000008152336004820152678ac7230489e8000060248201529051620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b1580156200026257600080fd5b505af115801562000277573d6000803e3d6000fd5b505050505b600354604080517f9f3cb655000000000000000000000000000000000000000000000000000000008152600e600482015261ffff90921660248301526001600160a01b03831660448301525173__IdToAddressBiMap______________________91639f3cb655916064808301926020929190829003018186803b1580156200030457600080fd5b505af415801562000319573d6000803e3d6000fd5b505050506040513d60208110156200033057600080fd5b50516200039e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015290519081900360640190fd5b600354604080516001600160a01b038416815261ffff909216602083015280517fe4b282c4351ffe36572a572de193a7de086edc47c9e62669fe6ab49fc53a33139281900390910190a1506003805461ffff8082166001011661ffff19909116179055565b61593a80620004136000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806395466a4611610146578063e1d5f64e116100c3578063f36b635511610087578063f36b635514611217578063f3f479821461124f578063f47c84c51461127d578063f940e38514611285578063fb736d32146112b3578063ff97c626146112bb57610253565b8063e1d5f64e146111a1578063e48c015e146111a9578063e720ac8e146111b1578063ed2da357146111b9578063ef574d23146111f157610253565b8063c33eb9f61161010a578063c33eb9f6146110f4578063c49598fb14611122578063d48bfca714611145578063d4fac45d1461116b578063d73792a91461119957610253565b806395466a4614610c4c5780639bb0f59914610c845780639cc84ed314610cbe578063b3c0afa114610cfb578063c1ef283814610d4757610253565b80634bdc1b4c116101d457806372f3dd391161019857806372f3dd3914610b38578063793b8c6d14610b5e5780637fb47b0614610bde5780638e499bcf14610be6578063907767c014610c0557610253565b80634bdc1b4c146106cf57806361ed16d014610770578063647846a51461079457806365cc3e781461079c57806366367c1014610b1757610253565b80632f10d0821161021b5780632f10d08214610600578063397a1b281461063d57806341e383ed1461066b57806343383ac31461067357806347e7ef24146106a357610253565b8063094c7e191461025857806317569c1d1461027257806323d4a3c91461027a57806326c3d394146102f75780632e4c83bd14610345575b600080fd5b6102606112c3565b60408051918252519081900360200190f35b6102606112c8565b6102826112d5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102bc5781810151838201526020016102a4565b50505050905090810190601f1680156102e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610260600480360360a081101561030d57600080fd5b5061ffff813581169160208101359091169063ffffffff604082013516906001600160801b036060820135811691608001351661144e565b610260600480360360e081101561035b57600080fd5b63ffffffff82351691602081013591810190606081016040820135600160201b81111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460208302840111600160201b831117156103ba57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561040957600080fd5b82018360208201111561041b57600080fd5b803590602001918460208302840111600160201b8311171561043c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561048b57600080fd5b82018360208201111561049d57600080fd5b803590602001918460208302840111600160201b831117156104be57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561050d57600080fd5b82018360208201111561051f57600080fd5b803590602001918460208302840111600160201b8311171561054057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561058f57600080fd5b8201836020820111156105a157600080fd5b803590602001918460208302840111600160201b831117156105c257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611473945050505050565b6106216004803603602081101561061657600080fd5b503561ffff16611e96565b604080516001600160a01b039092168252519081900360200190f35b6106696004803603604081101561065357600080fd5b506001600160a01b038135169060200135611f2a565b005b610260611f40565b6102826004803603604081101561068957600080fd5b5080356001600160a01b0316906020013561ffff16611f4c565b610669600480360360408110156106b957600080fd5b506001600160a01b03813516906020013561214c565b610669600480360360208110156106e557600080fd5b810190602081018135600160201b8111156106ff57600080fd5b82018360208201111561071157600080fd5b803590602001918460208302840111600160201b8311171561073257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061224d945050505050565b6107786124cc565b604080516001600160801b039092168252519081900360200190f35b6106216124d2565b610ac7600480360360c08110156107b257600080fd5b810190602081018135600160201b8111156107cc57600080fd5b8201836020820111156107de57600080fd5b803590602001918460208302840111600160201b831117156107ff57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561084e57600080fd5b82018360208201111561086057600080fd5b803590602001918460208302840111600160201b8311171561088157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156108d057600080fd5b8201836020820111156108e257600080fd5b803590602001918460208302840111600160201b8311171561090357600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561095257600080fd5b82018360208201111561096457600080fd5b803590602001918460208302840111600160201b8311171561098557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156109d457600080fd5b8201836020820111156109e657600080fd5b803590602001918460208302840111600160201b83111715610a0757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610a5657600080fd5b820183602082011115610a6857600080fd5b803590602001918460208302840111600160201b83111715610a8957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506124e7945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610b03578181015183820152602001610aeb565b505050509050019250505060405180910390f35b61077860048036036020811015610b2d57600080fd5b503561ffff166125d5565b61028260048036036020811015610b4e57600080fd5b50356001600160a01b03166125f0565b610b8a60048036036040811015610b7457600080fd5b506001600160a01b038135169060200135612600565b6040805161ffff988916815296909716602087015263ffffffff948516868801529290931660608501526001600160801b03908116608085015291821660a08401521660c082015290519081900360e00190f35b61077861267e565b610bee612684565b6040805161ffff9092168252519081900360200190f35b610c3360048036036040811015610c1b57600080fd5b506001600160a01b038135811691602001351661268e565b6040805163ffffffff9092168252519081900360200190f35b61028260048036036060811015610c6257600080fd5b506001600160a01b038135169061ffff602082013581169160400135166126b1565b610caa60048036036020811015610c9a57600080fd5b50356001600160a01b031661285a565b604080519115158252519081900360200190f35b610cc66128bf565b6040805163ffffffff90951685526001600160a01b039093166020850152838301919091526060830152519081900360800190f35b610d2960048036036040811015610d1157600080fd5b506001600160a01b03813581169160200135166128e3565b6040805192835263ffffffff90911660208301528051918290030190f35b610ac7600480360360e0811015610d5d57600080fd5b810190602081018135600160201b811115610d7757600080fd5b820183602082011115610d8957600080fd5b803590602001918460208302840111600160201b83111715610daa57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610df957600080fd5b820183602082011115610e0b57600080fd5b803590602001918460208302840111600160201b83111715610e2c57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610e7b57600080fd5b820183602082011115610e8d57600080fd5b803590602001918460208302840111600160201b83111715610eae57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610efd57600080fd5b820183602082011115610f0f57600080fd5b803590602001918460208302840111600160201b83111715610f3057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610f7f57600080fd5b820183602082011115610f9157600080fd5b803590602001918460208302840111600160201b83111715610fb257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561100157600080fd5b82018360208201111561101357600080fd5b803590602001918460208302840111600160201b8311171561103457600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561108357600080fd5b82018360208201111561109557600080fd5b803590602001918460208302840111600160201b831117156110b657600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061293d945050505050565b610d296004803603604081101561110a57600080fd5b506001600160a01b0381358116916020013516612962565b610caa6004803603602081101561113857600080fd5b503563ffffffff166129bc565b6106696004803603602081101561115b57600080fd5b50356001600160a01b03166129f0565b6102606004803603604081101561118157600080fd5b506001600160a01b0381358116916020013516612c15565b610778612d3e565b610778612d44565b610c33612d49565b610c33612d4f565b610282600480360360608110156111cf57600080fd5b506001600160a01b038135169061ffff60208201358116916040013516612d57565b610bee6004803603602081101561120757600080fd5b50356001600160a01b0316612ecd565b6106696004803603606081101561122d57600080fd5b5080356001600160a01b0316906020810135906040013563ffffffff16612f32565b610caa6004803603604081101561126557600080fd5b506001600160a01b0381358116916020013516613039565b6102606130b1565b6106696004803603604081101561129b57600080fd5b506001600160a01b03813581169160200135166130b7565b6102606132ae565b6102606132b3565b606481565b61012c4281900690035b90565b600d54606090600160a01b90046001600160601b0316156112d2576000600c73__IterableAppendOnlySet_________________6368fb2bc290916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561134457600080fd5b505af4158015611358573d6000803e3d6000fd5b505050506040513d602081101561136e57600080fd5b5051905060005b8061144957611393611386836125f0565b849063ffffffff6132e616565b600d549093506001600160a01b03838116911614156113b457506001611444565b6040805163218777b360e21b8152600c60048201526001600160a01b0384166024820152905173__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b15801561141557600080fd5b505af4158015611429573d6000803e3d6000fd5b505050506040513d602081101561143f57600080fd5b505191505b611375565b505090565b6000611465868661145d612d4f565b878787613363565b61ffff169695505050505050565b600061147e886129bc565b6114b95760405162461bcd60e51b815260040180806020018281038252602f8152602001806156af602f913960400191505060405180910390fd5b6114c2876138cf565b6114fd5760405162461bcd60e51b815260040180806020018281038252603f81526020018061580a603f913960400191505060405180910390fd5b61150683613902565b6115415760405162461bcd60e51b815260040180806020018281038252602c815260200180615723602c913960400191505060405180910390fd5b8160008151811061154e57fe5b602002602001015161ffff16600014156115af576040805162461bcd60e51b815260206004820152601a60248201527f46656520746f6b656e2068617320666978656420707269636521000000000000604482015290519081900360640190fd5b6115b882613959565b6115f35760405162461bcd60e51b81526004018080602001828103825260218152602001806157c36021913960400191505060405180910390fd5b601e865111156116345760405162461bcd60e51b81526004018080602001828103825260238152602001806156096023913960400191505060405180910390fd5b600061163e6139b1565b9050611648613a43565b6116528484613e12565b61165e60076000615446565b606061166984613f00565b90506000805b8951811015611ab757611680615467565b600460008c848151811061169057fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208a83815181106116c457fe5b602002602001015161ffff16815481106116da57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201529050611771818e613f37565b6117b5576040805162461bcd60e51b815260206004820152601060248201526f13dc99195c881a5cc81a5b9d985b1a5960821b604482015290519081900360640190fd5b6000806117d58b85815181106117c757fe5b602002602001015184613f6a565b90925090506127106001600160801b03831610156118245760405162461bcd60e51b81526004018080602001828103825260238152602001806155e66023913960400191505060405180910390fd5b6127106001600160801b038216101561186e5760405162461bcd60e51b81526004018080602001828103825260248152602001806158726024913960400191505060405180910390fd5b825160208401516118899188918c868663ffffffff613fb816565b806001600160801b031661189c8461406c565b6001600160801b031610156118e25760405162461bcd60e51b81526004018080602001828103825260318152602001806157716031913960400191505060405180910390fd5b60a0830151611903906001600160801b03848116911663ffffffff61407b16565b6080840151611924906001600160801b03848116911663ffffffff61407b16565b1115611977576040805162461bcd60e51b815260206004820152601960248201527f6c696d6974207072696365206e6f742073617469736669656400000000000000604482015290519081900360640190fd5b61199161198483856140d4565b869063ffffffff61420716565b94506119c48d85815181106119a257fe5b60200260200101518d86815181106119b657fe5b602002602001015183614261565b6119f78d85815181106119d357fe5b60200260200101516119e88560000151611e96565b846001600160801b03166143f8565b826020015161ffff168c8581518110611a0c57fe5b602002602001015161ffff168e8681518110611a2457fe5b60200260200101516001600160a01b03167fafa5bc1fb80950b7cb2353ba0cf16a6d68de75801f2dac54b2dae9268450010a86600001518587604051808461ffff1661ffff168152602001836001600160801b03166001600160801b03168152602001826001600160801b03166001600160801b03168152602001935050505060405180910390a450505060010161166f565b5060005b8951811015611c1157611acc615467565b600460008c8481518110611adc57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208a8381518110611b1057fe5b602002602001015161ffff1681548110611b2657fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c08201528a51909250611bd1908b9085908110611bc357fe5b602002602001015183613f6a565b915050611c078c8481518110611be357fe5b6020026020010151611bf88460200151611e96565b836001600160801b0316614458565b5050600101611abb565b506000805b8a51811015611d3c57611d32611d25600460008e8581518110611c3557fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208c8481518110611c6957fe5b602002602001015161ffff1681548110611c7f57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201528d518e9085908110611d1857fe5b60200260200101516144c1565b839063ffffffff61420716565b9150600101611c16565b5060006002611d4a856145c4565b81611d5157fe5b0490506000611d7683611d6a868563ffffffff61420716565b9063ffffffff6145e216565b9050611d8181614624565b611d8a8261466d565b611d9385614689565b611da08e8d8d8d8c614758565b336001600160a01b03167f2140b6253bf38aea0a4ac9e9e6427b256e4035d60df4a85bb139ce975eb6b41d8585858a8e8e604051808781526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611e2d578181015183820152602001611e15565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611e6c578181015183820152602001611e54565b505050509050019850505050505050505060405180910390a29d9c50505050505050505050505050565b60408051632ffeb2d760e21b8152600e600482015261ffff83166024820152905160009173__IdToAddressBiMap______________________9163bffacb5c91604480820192602092909190829003018186803b158015611ef657600080fd5b505af4158015611f0a573d6000803e3d6000fd5b505050506040513d6020811015611f2057600080fd5b505190505b919050565b611f3c8282611f37612d4f565b612f32565b5050565b678ac7230489e8000081565b600d54606090600160a01b90046001600160601b0316611f6b57612146565b6000836001600160a01b038116612041576040805163347d95e160e11b8152600c6004820152905173__IterableAppendOnlySet_________________916368fb2bc2916024808301926020929190829003018186803b158015611fce57600080fd5b505af4158015611fe2573d6000803e3d6000fd5b505050506040513d6020811015611ff857600080fd5b5051604080516001600160601b0319606084901b16602082015281518082036014018152603490910190915290915061203890849063ffffffff6132e616565b92506001909101905b8361ffff168261ffff161080156120665750600d546001600160a01b03828116911614155b15612143576040805163218777b360e21b8152600c60048201526001600160a01b0383166024820152905173__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b1580156120cc57600080fd5b505af41580156120e0573d6000803e3d6000fd5b505050506040513d60208110156120f657600080fd5b5051604080516001600160601b0319606084901b16602082015281518082036014018152603490910190915290915061213690849063ffffffff6132e616565b9250600190910190612041565b50505b92915050565b612156338361489b565b6121628233308461495b565b336000908152602081815260408083206001600160a01b0386168452909152902060010154612197908263ffffffff61420716565b336000908152602081815260408083206001600160a01b03871684529091529020600101556121c4612d4f565b336000818152602081815260408083206001600160a01b0388168085529252909120600201805463ffffffff191663ffffffff94909416939093179092557fc11cc34e93c67a93382b99f2498e9937198798f3c1c2888008ffc0eeb82f68c48361222c612d4f565b6040805192835263ffffffff90911660208301528051918290030190a35050565b60006001612259612d4f565b03905060005b82518161ffff1610156124c75733600090815260046020526040902083516123399190859061ffff851690811061229257fe5b602002602001015161ffff16815481106122a857fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c082015283613f37565b6123f5573360009081526004602052604090208351849061ffff841690811061235e57fe5b602002602001015161ffff168154811061237457fe5b60009182526020822060029091020180546001600160e01b031916815560010155825133907f7b0a9854603fbbe7606a58b70d113bd0d1ec8475f1b8cc9603c2d377e67835cd90859061ffff85169081106123cb57fe5b6020026020010151604051808261ffff1661ffff16815260200191505060405180910390a26124bf565b3360009081526004602052604090208351839190859061ffff851690811061241957fe5b602002602001015161ffff168154811061242f57fe5b906000526020600020906002020160000160086101000a81548163ffffffff021916908363ffffffff160217905550336001600160a01b03167f7a02963a37046835196f1a3185a036fd67cfca72283e46e4b3cdb99939851937848361ffff168151811061249957fe5b6020026020010151604051808261ffff1661ffff16815260200191505060405180910390a25b60010161225f565b505050565b61271081565b6003546201000090046001600160a01b031681565b60608651604051908082528060200260200182016040528015612514578160200160208202803883390190505b50905060005b87518110156125ca576125a388828151811061253257fe5b602002602001015188838151811061254657fe5b602002602001015188848151811061255a57fe5b602002602001015188858151811061256e57fe5b602002602001015188868151811061258257fe5b602002602001015188878151811061259657fe5b6020026020010151613363565b8282815181106125af57fe5b61ffff9092166020928302919091019091015260010161251a565b509695505050505050565b6005602052600090815260409020546001600160801b031681565b6060612146826000600019612d57565b6004602052816000526040600020818154811061261957fe5b60009182526020909120600290910201805460019091015461ffff808316945062010000830416925063ffffffff600160201b8304811692600160401b8104909116916001600160801b03600160601b90920482169181811691600160801b90041687565b60001981565b60035461ffff1681565b600160209081526000928352604080842090915290825290205463ffffffff1681565b600d54606090600160a01b90046001600160601b03166126d057612853565b82846001600160a01b038116612761576040805163347d95e160e11b8152600c6004820152905173__IterableAppendOnlySet_________________916368fb2bc2916024808301926020929190829003018186803b15801561273257600080fd5b505af4158015612746573d6000803e3d6000fd5b505050506040513d602081101561275c57600080fd5b505190505b825161ffff85169060709004101561285057612797611386828460706001600160801b031687518161278f57fe5b048803612d57565b600d549093506001600160a01b03828116911614156127b857506128539050565b6040805163218777b360e21b8152600c60048201526001600160a01b038316602482015290516000935073__IterableAppendOnlySet_________________9163861ddecc916044808301926020929190829003018186803b15801561281d57600080fd5b505af4158015612831573d6000803e3d6000fd5b505050506040513d602081101561284757600080fd5b50519050612761565b50505b9392505050565b60408051636e8930a360e11b8152600e60048201526001600160a01b0383166024820152905160009173__IdToAddressBiMap______________________9163dd12614691604480820192602092909190829003018186803b158015611ef657600080fd5b600654600954600a54600b5463ffffffff909316926001600160a01b039092169184565b6000806128ee6154a3565b5050506001600160a01b039182166000908152602081815260408083209390941682529182528290208251808401909352600181015480845260029091015463ffffffff169290910182905291565b60606129488861224d565b6129568787878787876124e7565b98975050505050505050565b60008061296d6154a3565b5050506001600160a01b039182166000908152602081815260408083209390941682529182528290208251808401909352600381015480845260049091015463ffffffff169290910182905291565b600060016129c8612d4f565b0363ffffffff168263ffffffff161480156121465750603c6129e86112c8565b101592915050565b60025460035461ffff1610612a41576040805162461bcd60e51b815260206004820152601260248201527113585e081d1bdad95b9cc81c995858da195960721b604482015290519081900360640190fd5b60035461ffff1615612ac55760035460408051634417f4db60e01b8152336004820152678ac7230489e8000060248201529051620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b158015612aac57600080fd5b505af1158015612ac0573d6000803e3d6000fd5b505050505b60035460408051639f3cb65560e01b8152600e600482015261ffff90921660248301526001600160a01b03831660448301525173__IdToAddressBiMap______________________91639f3cb655916064808301926020929190829003018186803b158015612b3357600080fd5b505af4158015612b47573d6000803e3d6000fd5b505050506040513d6020811015612b5d57600080fd5b5051612bb0576040805162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015290519081900360640190fd5b600354604080516001600160a01b038416815261ffff909216602083015280517fe4b282c4351ffe36572a572de193a7de086edc47c9e62669fe6ab49fc53a33139281900390910190a1506003805461ffff8082166001011661ffff19909116179055565b6001600160a01b03808316600090815260208181526040808320938516835292905290812054612c43612d4f565b6001600160a01b038086166000908152602081815260408083209388168352929052206002015463ffffffff91821691161015612cb5576001600160a01b0380851660009081526020818152604080832093871683529290522060010154612cb290829063ffffffff61420716565b90505b612cbd612d4f565b6001600160a01b038086166000908152602081815260408083209388168352929052206004015463ffffffff91821691161015612853576001600160a01b0380851660009081526020818152604080832093871683529290522060030154612d3690612d2990836149bb565b829063ffffffff6145e216565b949350505050565b6103e881565b607081565b61012c81565b61012c420490565b6060825b6001600160a01b038516600090815260046020526040902054612d849061ffff868601166149bb565b8161ffff161015612ec557612ebb612eae86612df688612df1600460008c6001600160a01b03166001600160a01b031681526020019081526020016000208761ffff1681548110612dd157fe5b600091825260209091206002909102015462010000900461ffff16611e96565b612c15565b6001600160a01b0389166000908152600460205260409020805461ffff8716908110612e1e57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c08201526149d1565b839063ffffffff6132e616565b9150600101612d5b565b509392505050565b6040805163b3129e1f60e01b8152600e60048201526001600160a01b0383166024820152905160009173__IdToAddressBiMap______________________9163b3129e1f91604480820192602092909190829003018186803b158015611ef657600080fd5b612f3c3384613039565b15612f4b57612f4b33846130b7565b612f53612d4f565b63ffffffff168163ffffffff161015612f9d5760405162461bcd60e51b81526004018080602001828103825260228152602001806158e46022913960400191505060405180910390fd5b60408051808201825283815263ffffffff83811660208084018281523360008181528084528781206001600160a01b038c16808352908552908890209651600388015591516004909601805463ffffffff19169690951695909517909355845187815290810191909152835191937f2c6245af506f0fc1089918c02c1d01bde9cc807609b334b3e7644d6dfb5a6c5e92918290030190a3505050565b6000613043612d4f565b6001600160a01b038085166000908152602081815260408083209387168352929052206004015463ffffffff91821691161080156128535750506001600160a01b0391821660009081526020818152604080832093909416825291909152206004015463ffffffff16151590565b60025481565b6130c1828261489b565b6130c9612d4f565b6001600160a01b038084166000908152602081815260408083209386168352929052206004015463ffffffff9182169116106131365760405162461bcd60e51b81526004018080602001828103825260268152602001806157e46026913960400191505060405180910390fd5b61313e612d4f565b6001600160a01b0380841660009081526001602090815260408083209386168352929052205463ffffffff9182169116106131aa5760405162461bcd60e51b81526004018080602001828103825260458152602001806156de6045913960600191505060405180910390fd5b6001600160a01b03828116600090815260208181526040808320938516835292905290812080546003909101546131e191906149bb565b6001600160a01b0380851660009081526020818152604080832093871683529290522054909150613218908263ffffffff6145e216565b6001600160a01b0384811660009081526020818152604080832093871683529290529081209182556003820155600401805463ffffffff1916905561325e828483614c08565b816001600160a01b0316836001600160a01b03167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040518082815260200191505060405180910390a3505050565b601e81565b600060016132bf612d4f565b60065463ffffffff908116929091031614156132de5750600b546112d2565b5060006112d2565b6060806040519050835180825260208201818101602087015b818310156133175780518352602092830192016132ff565b50855184518101855292509050808201602086015b8183101561334457805183526020928301920161332c565b508651929092011591909101601f01601f191660405250905092915050565b6040805163ab8978b760e01b8152600e600482015261ffff88166024820152905160009173__IdToAddressBiMap______________________9163ab8978b791604480820192602092909190829003018186803b1580156133c357600080fd5b505af41580156133d7573d6000803e3d6000fd5b505050506040513d60208110156133ed57600080fd5b5051613440576040805162461bcd60e51b815260206004820152601860248201527f42757920746f6b656e206d757374206265206c69737465640000000000000000604482015290519081900360640190fd5b6040805163ab8978b760e01b8152600e600482015261ffff88166024820152905173__IdToAddressBiMap______________________9163ab8978b7916044808301926020929190829003018186803b15801561349c57600080fd5b505af41580156134b0573d6000803e3d6000fd5b505050506040513d60208110156134c657600080fd5b5051613519576040805162461bcd60e51b815260206004820152601960248201527f53656c6c20746f6b656e206d757374206265206c697374656400000000000000604482015290519081900360640190fd5b8561ffff168761ffff161415613576576040805162461bcd60e51b815260206004820152601c60248201527f45786368616e676520746f6b656e73206e6f742064697374696e637400000000604482015290519081900360640190fd5b61357e612d4f565b63ffffffff168563ffffffff1610156135c85760405162461bcd60e51b815260040180806020018281038252602281526020018061574f6022913960400191505060405180910390fd5b60046000336001600160a01b03166001600160a01b031681526020019081526020016000206040518060e001604052808961ffff1681526020018861ffff1681526020018763ffffffff1681526020018663ffffffff168152602001856001600160801b03168152602001846001600160801b0316815260200160006001600160801b03168152509080600181540180825580915050906001820390600052602060002090600202016000909192909190915060008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555060408201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600c6101000a8154816001600160801b0302191690836001600160801b0316021790555060a08201518160010160006101000a8154816001600160801b0302191690836001600160801b0316021790555060c08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555050505060006137cf600160046000336001600160a01b03166001600160a01b031681526020019081526020016000208054905003614c5a565b6040805161ffff808416825263ffffffff808b1660208401528916828401526001600160801b038089166060840152871660808301529151929350818a1692918b169133917fdecf6fde8243981299f7b7a776f29a9fc67a2c9848e25d77c50eb11fa58a7e21919081900360a00190a460408051634743bd0360e11b8152600c6004820152336024820152905173__IterableAppendOnlySet_________________91638e877a06916044808301926020929190829003018186803b15801561389757600080fd5b505af41580156138ab573d6000803e3d6000fd5b505050506040513d60208110156138c157600080fd5b509098975050505050505050565b60006138ea60656138de6132b3565b9063ffffffff61407b16565b6138fb83606463ffffffff61407b16565b1192915050565b6000805b8251811015613950576127106001600160801b031683828151811061392757fe5b60200260200101516001600160801b03161015613948576000915050611f25565b600101613906565b50600192915050565b600060015b82518110156139505782600182038151811061397657fe5b602002602001015161ffff1683828151811061398e57fe5b602002602001015161ffff16116139a9576000915050611f25565b60010161395e565b60006139bb614ca1565b613a3d57600354600a5460408051634417f4db60e01b8152306004820152602481019290925251620100009092046001600160a01b031691634417f4db9160448082019260009290919082900301818387803b158015613a1a57600080fd5b505af1158015613a2e573d6000803e3d6000fd5b5050600a5492506112d2915050565b50600090565b613a4b614ca1565b15613e105760005b600754811015613be057600060066001018281548110613a6f57fe5b60009182526020822060029091020154600780546001600160a01b0390921693509084908110613a9b57fe5b906000526020600020906002020160010160109054906101000a900461ffff169050613ac5615467565b6001600160a01b0383166000908152600460205260409020805461ffff8416908110613aed57fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c082015260078054919350613bad9187908110613b8a57fe5b60009182526020909120600160029092020101546001600160801b031683613f6a565b915050613bd084613bc18460200151611e96565b836001600160801b0316614cc3565b505060019092019150613a539050565b5060005b600754811015613ded57600060066001018281548110613c0057fe5b60009182526020822060029091020154600780546001600160a01b0390921693509084908110613c2c57fe5b906000526020600020906002020160010160109054906101000a900461ffff169050613c56615467565b6001600160a01b0383166000908152600460205260409020805461ffff8416908110613c7e57fe5b600091825260208083206040805160e0810182526002909402909101805461ffff8082168652620100008204169385019390935263ffffffff600160201b8404811692850192909252600160401b830490911660608401526001600160801b03600160601b909204821660808401526001015480821660a0840152600160801b90041660c0820152600780549193508291613d41919088908110613d1e57fe5b60009182526020909120600160029092020101546001600160801b031684613f6a565b91509150613d50858583614d30565b613d7085613d618560000151611e96565b846001600160801b0316614dd0565b60208084015184516040805161ffff92831681526001600160801b0380871695820195909552938616848201525191811692908716916001600160a01b038916917fb7214f648cea2a7c47aaea7e7aafef610de8d04366d26f66879d076516964eae919081900360600190a4505060019093019250613be4915050565b50600954613e10906001600160a01b0316613e086000611e96565b600a54614dd0565b565b60005b600854811015613e8b5760006005600060066002018481548110613e3557fe5b60009182526020808320601083040154600f9092166002026101000a90910461ffff168352820192909252604001902080546001600160801b0319166001600160801b0392909216919091179055600101613e15565b5060005b81518110156124c757828181518110613ea457fe5b602002602001015160056000848481518110613ebc57fe5b60209081029190910181015161ffff16825281019190915260400160002080546001600160801b0319166001600160801b0392909216919091179055600101613e8f565b60608151600101604051908082528060200260200182016040528015613f30578160200160208202803883390190505b5092915050565b60008163ffffffff16836040015163ffffffff161115801561285357505060609091015163ffffffff9182169116101590565b805161ffff90811660009081526005602090815260408083205491850151909316825291812054909182918291613faf9187916001600160801b039081169116614e0e565b94959350505050565b6000613fc48685614e45565b90506000613fd28686614e45565b9050614003846001600160801b0316898481518110613fed57fe5b6020026020010151614f2b90919063ffffffff16565b88838151811061400f57fe5b60200260200101818152505061404a836001600160801b031689838151811061403457fe5b6020026020010151614f9090919063ffffffff16565b88828151811061405657fe5b6020026020010181815250505050505050505050565b60c081015160a0909101510390565b60008261408a57506000612146565b8282028284828161409757fe5b04146128535760405162461bcd60e51b81526004018080602001828103825260218152602001806157a26021913960400191505060405180910390fd5b6080810151815161ffff9081166000908152600560209081526040808320549186015190931682529181205490928392614139926001600160801b03928316926141249289929082169116614e0e565b6001600160801b03169063ffffffff61407b16565b835161ffff1660009081526005602052604081205460a08601519293509091614194916001600160801b03908116916138de9161417e9187911663ffffffff614ff516565b6001600160801b0389169063ffffffff6145e216565b60a085018051865161ffff166000908152600560205260408120549251939450926141eb926001600160801b03928316926141df92918116916138de9189911663ffffffff61503716565b9063ffffffff614ff516565b90506141fd828263ffffffff6145e216565b9695505050505050565b600082820183811015612853576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600460205260409020805461431e919061ffff851690811061428e57fe5b60009182526020918290206040805160e0810182526002909302909101805461ffff8082168552620100008204169484019490945263ffffffff600160201b8504811692840192909252600160401b840490911660608301526001600160801b03600160601b909304831660808301526001015480831660a0830152600160801b900490911660c0820152615079565b156124c757614396614391826001600160801b031660046000876001600160a01b03166001600160a01b031681526020019081526020016000208561ffff168154811061436757fe5b6000918252602090912060029091020160010154600160801b90046001600160801b031690614207565b6150b3565b6001600160a01b0384166000908152600460205260409020805461ffff85169081106143be57fe5b906000526020600020906002020160010160106101000a8154816001600160801b0302191690836001600160801b03160217905550505050565b6144028383613039565b1561444d5761440f612d4f565b6001600160a01b038481166000908152600160209081526040808320938716835292905220805463ffffffff191663ffffffff929092169190911790555b6124c7838383614cc3565b6144628383612c15565b8111156144b6576040805162461bcd60e51b815260206004820152601e60248201527f416d6f756e742065786365656473207573657227732062616c616e63652e0000604482015290519081900360640190fd5b6124c7838383614dd0565b6000806144ef6144d08561406c565b6001600160801b03166144ea85612df18860200151611e96565b6149bb565b60a085015160208087015161ffff166000908152600590915260408120549293509161452d916001600160801b03918216911663ffffffff61407b16565b855161ffff1660009081526005602052604081205460808801519293509091614578916103e7916141df916103e8916138de916001600160801b03918216911663ffffffff61407b16565b905060008183111561459757614594838363ffffffff6145e216565b90505b60a08701516145b9906001600160801b03166141df868463ffffffff61407b16565b979650505050505050565b6000816000815181106145d357fe5b60200260200101519050919050565b600061285383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506150f7565b61462d816138cf565b6146685760405162461bcd60e51b815260040180806020018281038252603b81526020018061562c603b913960400191505060405180910390fd5b600b55565b600a819055614686336146806000611e96565b836143f8565b50565b60008160008151811061469857fe5b6020026020010151136146dc5760405162461bcd60e51b81526004018080602001828103825260298152602001806158496029913960400191505060405180910390fd5b60015b8151811015611f3c578181815181106146f457fe5b6020026020010151600014614750576040805162461bcd60e51b815260206004820181905260248201527f546f6b656e20636f6e736572766174696f6e20646f6573206e6f7420686f6c64604482015290519081900360640190fd5b6001016146df565b6006805463ffffffff191663ffffffff871617905560005b845181101561486d576006600101604051806060016040528087848151811061479557fe5b60200260200101516001600160a01b031681526020018584815181106147b757fe5b60200260200101516001600160801b031681526020018684815181106147d957fe5b60209081029190910181015161ffff908116909252835460018082018655600095865294829020845160029092020180546001600160a01b0319166001600160a01b039092169190911781559083015190840180546040909401516001600160801b03199094166001600160801b039092169190911761ffff60801b1916600160801b939092169290920217905501614770565b5080516148819060089060208401906154ba565b5050600980546001600160a01b0319163317905550505050565b6001600160a01b038083166000908152602081815260408083209385168352929052206002015463ffffffff1680158015906148e357506148da612d4f565b63ffffffff1681105b156124c7576001600160a01b038381166000908152602081815260408083209386168352929052206001810154905461491b91614207565b6001600160a01b0393841660009081526020818152604080832095909616825293909352928220928355506001820155600201805463ffffffff19169055565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526149b590859061518e565b50505050565b60008183106149ca5781612853565b5090919050565b604080516001600160601b0319606086901b166020820152815180820360140181526034820183526054808301869052835180840390910181526074909201909252614a2490829063ffffffff6132e616565b82516040805160f09290921b6001600160f01b03191660208301528051600281840301815260229092019052909150614a5e9082906132e6565b9050614aa18260200151604051602001808261ffff1661ffff1660f01b8152600201915050604051602081830303815290604052826132e690919063ffffffff16565b9050614ae88260400151604051602001808263ffffffff1663ffffffff1660e01b8152600401915050604051602081830303815290604052826132e690919063ffffffff16565b9050614b2f8260600151604051602001808263ffffffff1663ffffffff1660e01b8152600401915050604051602081830303815290604052826132e690919063ffffffff16565b9050614b7c826080015160405160200180826001600160801b03166001600160801b031660801b8152601001915050604051602081830303815290604052826132e690919063ffffffff16565b9050614bc98260a0015160405160200180826001600160801b03166001600160801b031660801b8152601001915050604051602081830303815290604052826132e690919063ffffffff16565b9050612d36614bd78361406c565b6040805160809290921b6001600160801b0319166020830152805160108184030181526030909201905282906132e6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124c790849061518e565b6000620100008210614c9d5760405162461bcd60e51b81526004018080602001828103825260268152602001806155c06026913960400191505060405180910390fd5b5090565b60006001614cad612d4f565b60065463ffffffff908116929091031614905090565b614ccd838361489b565b6001600160a01b0380841660009081526020818152604080832093861683529290522054614d01908263ffffffff61420716565b6001600160a01b0393841660009081526020818152604080832095909616825293909352929091209190915550565b6001600160a01b03831660009081526004602052604090208054614d5d919061ffff851690811061428e57fe5b156124c757614396614391826001600160801b031660046000876001600160a01b03166001600160a01b031681526020019081526020016000208561ffff1681548110614da657fe5b6000918252602090912060029091020160010154600160801b90046001600160801b0316906145e2565b614dda838361489b565b6001600160a01b0380841660009081526020818152604080832093861683529290522054614d01908263ffffffff6145e216565b6000612d366143916001600160801b03808516906141df906103e8906138de906103e79084908c8116908c1663ffffffff61407b16565b600061ffff8316614e5857506000612146565b8151600090600019015b818110614ede57600060028383010490508561ffff16858281518110614e8457fe5b602002602001015161ffff161415614ea3576001019250612146915050565b8561ffff16858281518110614eb457fe5b602002602001015161ffff161015614ed157806001019250614ed8565b6001810391505b50614e62565b6040805162461bcd60e51b815260206004820152601c60248201527f5072696365206e6f742070726f766964656420666f7220746f6b656e00000000604482015290519081900360640190fd5b6000818303818312801590614f405750838113155b80614f555750600083128015614f5557508381135b6128535760405162461bcd60e51b81526004018080602001828103825260248152602001806158966024913960400191505060405180910390fd5b6000828201818312801590614fa55750838112155b80614fba5750600083128015614fba57508381125b6128535760405162461bcd60e51b815260040180806020018281038252602181526020018061568e6021913960400191505060405180910390fd5b600061285383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615346565b600061285383836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f00000000000000008152506153ab565b60006000196001600160801b031682608001516001600160801b03161415801561214657505060a001516001600160801b03908116141590565b6000600160801b8210614c9d5760405162461bcd60e51b81526004018080602001828103825260278152602001806156676027913960400191505060405180910390fd5b600081848411156151865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561514b578181015183820152602001615133565b50505050905090810190601f1680156151785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6151a0826001600160a01b031661540d565b6151f1576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b6020831061522f5780518252601f199092019160209182019101615210565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615291576040519150601f19603f3d011682016040523d82523d6000602084013e615296565b606091505b5091509150816152ed576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156149b55780806020019051602081101561530957600080fd5b50516149b55760405162461bcd60e51b815260040180806020018281038252602a8152602001806158ba602a913960400191505060405180910390fd5b600081836153955760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561514b578181015183820152602001615133565b5060008385816153a157fe5b0495945050505050565b600081836153fa5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561514b578181015183820152602001615133565b5082848161540457fe5b06949350505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590612d36575050151592915050565b5080546000825560020290600052602060002090810190614686919061555f565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b604080518082019091526000808252602082015290565b82805482825590600052602060002090600f016010900481019282156155535791602002820160005b8382111561552357835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026154e3565b80156155515782816101000a81549061ffff0219169055600201602081600101049283019260010302615523565b505b50614c9d9291506155a0565b6112d291905b80821115614c9d5780546001600160a01b031916815560018101805471ffffffffffffffffffffffffffffffffffff19169055600201615565565b6112d291905b80821115614c9d57805461ffff191681556001016155a656fe53616665436173743a2076616c756520646f65736e27742066697420696e203136206269747362757920616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d536f6c7574696f6e2065786365656473204d41585f544f55434845445f4f52444552534e6577206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e53616665436173743a2076616c756520646f65736e27742066697420696e2031323820626974735369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77536f6c7574696f6e7320617265206e6f206c6f6e67657220616363657074656420666f7220746869732062617463685769746864726177206e6f7420706f737369626c6520666f7220746f6b656e20746861742069732074726164656420696e207468652063757272656e742061756374696f6e4174206c65617374206f6e65207072696365206c6f776572207468616e20414d4f554e545f4d494e494d554d4f72646572732063616e277420626520706c6163656420696e207468652070617374657865637574656453656c6c416d6f756e7420626967676572207468616e2073706563696669656420696e206f72646572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7770726963657320617265206e6f74206f72646572656420627920746f6b656e4964776974686472617720776173206e6f7420726567697374657265642070726576696f75736c79436c61696d6564206f626a65637469766520646f65736e27742073756666696369656e746c7920696d70726f76652063757272656e7420736f6c7574696f6e546f6b656e20636f6e736572766174696f6e2061742030206d75737420626520706f7369746976652e73656c6c20616d6f756e74206c657373207468616e20414d4f554e545f4d494e494d554d5369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564526571756573742063616e6e6f74206265206d61646520696e207468652070617374a265627a7a72305820e3b3ea95b1ffbe603c49c19d3de5b13f063b551d26f83b9e78e5da606203111464736f6c634300050a0032","contractName":"BatchExchange","devdoc":{"author":"@gnosis/dfusion-team ","methods":{"addToken(address)":{"details":"Used to list a new token on the contract: Hence, making it available for exchange in an auction.","params":{"token":"ERC20 token to be listed. * Requirements: - `maxTokens` has not already been reached - `token` has not already been added"}},"cancelOrders(uint16[])":{"details":"a user facing function used to cancel orders. If the order is valid for the batch that is currently being solved, it sets order expiry to that batchId. Otherwise it removes it from storage. Can be called multiple times (e.g. to eventually free storage once order is expired).","params":{"orderIds":"referencing the indices of user's orders to be cancelled * Emits an {OrderCancellation} or {OrderDeletion} with sender's address and orderId"}},"constructor":{"details":"Constructor determines exchange parameters","params":{"_feeToken":"Address of ERC20 fee token.","maxTokens":"The maximum number of tokens that can be listed."}},"deposit(address,uint256)":{"details":"credits user with deposit amount on next epoch (given by getCurrentBatchId)","params":{"amount":"number of token(s) to be credited to user's account * Emits an {Deposit} event with relevent deposit information. * Requirements: - token transfer to contract is successfull","token":"address of token to be deposited"}},"getBalance(address,address)":{"details":"fetches and returns user's balance","params":{"token":"address of ERC20 token return Current `token` balance of `user`'s account","user":"address of user"}},"getCurrentBatchId()":{"details":"getter function to determine current auction id. return current batchId"},"getCurrentObjectiveValue()":{"details":"gets the objective value of currently winning solution.","return":"objective function evaluation of the currently winning solution, or zero if no solution proposed."},"getEncodedOrders()":{"details":"View returning all byte-encoded sell orders","return":"encoded bytes representing all orders ordered by (user, index)"},"getEncodedUserOrders(address)":{"details":"View returning all byte-encoded sell orders for specified user","params":{"user":"address of user whose orders are being queried"},"return":"encoded bytes representing all orders"},"getEncodedUserOrdersPaginated(address,uint16,uint16)":{"details":"View returning all byte-encoded sell orders for specified user","params":{"offset":"uint determining the starting orderIndex","pageSize":"uint determining the count of elements to be viewed","user":"address of user whose orders are being queried"},"return":"encoded bytes representing all orders"},"getEncodedUsersPaginated(address,uint16,uint16)":{"details":"View returning byte-encoded sell orders in paginated form","params":{"pageSize":"uint determining the count of orders to be returned per page","previousPageUser":"address of last user received in the previous page (address(0) for first page)","previousPageUserOffset":"the number of orders received for the last user on the previous page (0 for first page)."},"return":"encoded bytes representing a page of orders ordered by (user, index)"},"getPendingDeposit(address,address)":{"details":"getter function used to display pending deposit","params":{"token":"address of ERC20 token return amount and batchId of deposit's transfer if any (else 0)","user":"address of user"}},"getPendingWithdraw(address,address)":{"details":"getter function used to display pending withdraw","params":{"token":"address of ERC20 token return amount and batchId when withdraw was requested if any (else 0)","user":"address of user"}},"getSecondsRemainingInBatch()":{"details":"used to determine how much time is left in a batch return seconds remaining in current batch"},"getUsersPaginated(address,uint16)":{"details":"View returning all byte-encoded users in paginated form","params":{"pageSize":"uint determining the count of users to be returned per page","previousPageUser":"address of last user received in last pages (address(0) for first page)"},"return":"encoded packed bytes of user addresses"},"hasToken(address)":{"details":"View returning a bool attesting whether token was already added","params":{"addr":"address of the token to be checked"},"return":"bool attesting whether token was already added"},"hasValidWithdrawRequest(address,address)":{"details":"Used to determine if user has a valid pending withdraw request of specific token","params":{"token":"address of ERC20 token return true if `user` has valid withdraw request for `token`, otherwise false","user":"address of user"}},"placeOrder(uint16,uint16,uint32,uint128,uint128)":{"details":"A user facing function used to place limit sell orders in auction with expiry defined by batchId","params":{"buyAmount":"relative minimum amount of requested buy amount","buyToken":"id of token to be bought","sellAmount":"maximum amount of sell token to be exchanged","sellToken":"id of token to be sold","validUntil":"batchId representing order's expiry"},"return":"orderId defined as the index in user's order array * Emits an {OrderPlacement} event with all relevant order details."},"placeValidFromOrders(uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])":{"details":"A user facing function used to place limit sell orders in auction with expiry defined by batchId Note that parameters are passed as arrays and the indices correspond to each order.","params":{"buyAmounts":"relative minimum amount of requested buy amounts","buyTokens":"ids of tokens to be bought","sellAmounts":"maximum amounts of sell token to be exchanged","sellTokens":"ids of tokens to be sold","validFroms":"batchIds representing order's validity start time","validUntils":"batchIds representing order's expiry"},"return":"`orderIds` an array of indices in which `msg.sender`'s orders are included * Emits an {OrderPlacement} event with all relevant order details."},"replaceOrders(uint16[],uint16[],uint16[],uint32[],uint32[],uint128[],uint128[])":{"details":"A user facing wrapper to cancel and place new orders in the same transaction.","params":{"buyAmounts":"relative minimum amount of requested buy amounts in new orders","buyTokens":"ids of tokens to be bought in new orders","cancellations":"indices of orders to be cancelled","sellAmounts":"maximum amounts of sell token to be exchanged in new orders","sellTokens":"ids of tokens to be sold in new orders","validFroms":"batchIds representing order's validity start time in new orders","validUntils":"batchIds represnnting order's expiry in new orders"},"return":"an array of indices in which `msg.sender`'s new orders are included * Emits {OrderCancellation} events for all cancelled orders and {OrderPlacement} events with relevant new order details."},"requestFutureWithdraw(address,uint256,uint32)":{"details":"Signals and initiates user's intent to withdraw.","params":{"amount":"number of token(s) to be withdrawn","batchId":"state index at which request is to be made. * Emits an {WithdrawRequest} event with relevent request information.","token":"address of token to be withdrawn"}},"requestWithdraw(address,uint256)":{"details":"Signals and initiates user's intent to withdraw.","params":{"amount":"number of token(s) to be withdrawn * Emits an {WithdrawRequest} event with relevent request information.","token":"address of token to be withdrawn"}},"submitSolution(uint32,uint256,address[],uint16[],uint128[],uint128[],uint16[])":{"details":"a solver facing function called for auction settlement","params":{"batchId":"index of auction solution is referring to","buyVolumes":"executed buy amounts for each order identified by index of owner-orderId arrays","orderIds":"array of order indices used in parallel with owners to identify touched order","owners":"array of addresses corresponding to touched orders","prices":"list of prices for touched tokens indexed by next parameter","tokenIdsForPrice":"price[i] is the price for the token with tokenID tokenIdsForPrice[i]"},"return":"the computed objective value of the solution * Requirements: - Solutions for this `batchId` are currently being accepted. - Claimed objetive value is a great enough improvement on the current winning solution - Fee Token price is non-zero - `tokenIdsForPrice` is sorted. - Number of touched orders does not exceed `MAX_TOUCHED_ORDERS`. - Each touched order is valid at current `batchId`. - Each touched order's `executedSellAmount` does not exceed its remaining amount. - Limit Price of each touched order is respected. - Solution's objective evaluation must be positive. * Sub Requirements: Those nested within other functions - checkAndOverrideObjectiveValue; Objetive value is a great enough improvement on the current winning solution - checkTokenConservation; for all, non-fee, tokens total amount sold == total amount bought"},"tokenAddressToIdMap(address)":{"details":"View returning ID of listed tokens","params":{"addr":"address of listed token."},"return":"tokenId as stored within the contract."},"tokenIdToAddressMap(uint16)":{"details":"View returning address of listed token by ID","params":{"id":"tokenId as stored, via BiMap, within the contract."},"return":"address of (listed) token"},"withdraw(address,address)":{"details":"Claims pending withdraw - can be called on behalf of others","params":{"token":"address of token to be withdrawn","user":"address of user who withdraw is being claimed. * Emits an {Withdraw} event stating that `user` withdrew `amount` of `token` * Requirements: - withdraw was requested in previous epoch - token was received from exchange in current auction batch"}}},"title":"BatchExchange - A decentralized exchange for any ERC20 token as a multi-token batch auction with uniform clearing prices. For more information visit: "},"networks":{"1":{"address":"0x6F400810b62df8E13fded51bE75fF5393eaa841F","links":{"IdToAddressBiMap":"0xED4d05496C71e71cC2A8726af1242C22108d1761","IterableAppendOnlySet":"0xCDDB32b6Bb2808D5B5115dAab207479cE98d2636"},"transactionHash":"0xe74e8e965afc67f96a38caee794f008be33a7fe7ea96b9baad7b2963250ac36a"},"100":{"address":"0x25B06305CC4ec6AfCF3E7c0b673da1EF8ae26313","links":{"IdToAddressBiMap":"0x048E53A455a058462eA58442E1D94Fbc955495cB","IterableAppendOnlySet":"0x57E6B987c2ccd421859A244dd22a0D5a62D88f91"},"transactionHash":"0xd5e7da686ace1ae7f1917ad54b8610ee936bdc900e56b495739795fba3d5e7c1"},"4":{"address":"0xC576eA7bd102F7E476368a5E98FA455d1Ea34dE2","links":{"IdToAddressBiMap":"0x5c4C6bf91240A5fdBfB9a1BEd8d43227046e2feA","IterableAppendOnlySet":"0x0D47D0548FDAD66B06E81a826EED8c687aCddBCB"},"transactionHash":"0xc5bf4f48747093a79b623c2a2392ccbdb73a3d788e7d1f0f53f640ea18496d90"}},"userdoc":{"methods":{}}} \ No newline at end of file diff --git a/contracts/artifacts/BatchExchangeViewer.json b/contracts/artifacts/BatchExchangeViewer.json index 90086baff..1f64aee4f 100644 --- a/contracts/artifacts/BatchExchangeViewer.json +++ b/contracts/artifacts/BatchExchangeViewer.json @@ -1 +1 @@ -{"abi":[{"constant":true,"inputs":[],"name":"INDEXED_AUCTION_ELEMENT_WIDTH","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ADDRESS_WIDTH","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LARGE_PAGE_SIZE","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AUCTION_ELEMENT_WIDTH","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"ALL_TOKEN_FILTER","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"exchange","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"address[]"}],"name":"getOpenOrderBook","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"address[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"maxPageSize","type":"uint16"}],"name":"getOpenOrderBookPaginated","outputs":[{"name":"elements","type":"bytes"},{"name":"hasNextPage","type":"bool"},{"name":"nextPageUser","type":"address"},{"name":"nextPageUserOffset","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"address[]"}],"name":"getFinalizedOrderBook","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"address[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"maxPageSize","type":"uint16"}],"name":"getFinalizedOrderBookPaginated","outputs":[{"name":"elements","type":"bytes"},{"name":"hasNextPage","type":"bool"},{"name":"nextPageUser","type":"address"},{"name":"nextPageUserOffset","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"batchIds","type":"uint32[3]"},{"name":"tokenFilter","type":"uint16[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"maxPageSize","type":"uint16"}],"name":"getFilteredOrdersPaginated","outputs":[{"name":"elements","type":"bytes"},{"name":"hasNextPage","type":"bool"},{"name":"nextPageUser","type":"address"},{"name":"nextPageUserOffset","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"pageSize","type":"uint256"}],"name":"getEncodedOrdersPaginated","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"uint16[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"pageSize","type":"uint256"}],"name":"getEncodedOrdersPaginatedWithTokenFilter","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"uint16[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"elements","type":"bytes"}],"name":"writeEncodedOrdersPaginatedWithTokenFilter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"buyToken","type":"uint16"},{"name":"sellToken","type":"uint16"},{"name":"filter","type":"uint16[]"}],"name":"matchesTokenFilter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getUser","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getSellTokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"},{"name":"amount","type":"uint256"}],"name":"updateSellTokenBalance","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getBuyToken","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getSellToken","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getValidFrom","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getValidUntil","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"tokenIds","type":"address[]"}],"name":"getTokenIdsFromAdresses","outputs":[{"name":"","type":"uint16[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"},{"name":"targetBatchIndex","type":"uint32"}],"name":"updateSellTokenBalanceForBatchId","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint16"}],"name":"getTokenInfo","outputs":[{"name":"","type":"address"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getTokenSymbolString","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getTokenSymbolBytes","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"buffer","type":"bytes"},{"name":"length","type":"uint256"}],"name":"setLength","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"source","type":"bytes"},{"name":"destination","type":"bytes"},{"name":"offset","type":"uint256"}],"name":"copyInPlace","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50604051612cdf380380612cdf8339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612c7c806100636000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063970957bb116100f9578063d08f722811610097578063e9469eb111610071578063e9469eb114611105578063e9d98f0914611122578063f469c116146111de578063fa55171614611282576101c4565b8063d08f7228146110ed578063d615388a146110f5578063d9d80082146110fd576101c4565b8063a94a3df9116100d3578063a94a3df914610f31578063b0c1926514610fed578063b54810fd14611023578063b900dc02146110c7576101c4565b8063970957bb14610d9a5780639e47107514610e5a578063a8ef264214610f13576101c4565b80636d7e99d1116101665780637c40a1b3116101405780637c40a1b314610a8d5780637c66b49314610b2e5780639101074c14610bda578063951b13f114610c00576101c4565b80636d7e99d1146108015780636df5a662146108a557806376137caa14610962576101c4565b8063348ae418116101a2578063348ae4181461049757806334e59fa6146105ad5780633b4c5f1b1461069e57806352b8dfc514610759576101c4565b80630ce0f677146101c95780631c58e7931461029257806329258dee14610346575b600080fd5b61027e600480360360608110156101df57600080fd5b61ffff8235811692602081013590911691810190606081016040820135600160201b81111561020d57600080fd5b82018360208201111561021f57600080fd5b803590602001918460208302840111600160201b8311171561024057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611328945050505050565b604080519115158252519081900360200190f35b6102b3600480360360208110156102a857600080fd5b503561ffff166113b9565b604080516001600160a01b038516815260ff831691810191909152606060208083018281528551928401929092528451608084019186019080838360005b838110156103095781810151838201526020016102f1565b50505050905090810190601f1680156103365780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6104856004803603608081101561035c57600080fd5b810190602081018135600160201b81111561037657600080fd5b82018360208201111561038857600080fd5b803590602001918460208302840111600160201b831117156103a957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092956001600160a01b038535169561ffff60208701351695919450925060608101915060400135600160201b81111561041157600080fd5b82018360208201111561042357600080fd5b803590602001918460018302840111600160201b8311171561044457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116a5945050505050565b60408051918252519081900360200190f35b610538600480360360208110156104ad57600080fd5b810190602081018135600160201b8111156104c757600080fd5b8201836020820111156104d957600080fd5b803590602001918460208302840111600160201b831117156104fa57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611924945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561057257818101518382015260200161055a565b50505050905090810190601f16801561059f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61064e600480360360208110156105c357600080fd5b810190602081018135600160201b8111156105dd57600080fd5b8201836020820111156105ef57600080fd5b803590602001918460208302840111600160201b8311171561061057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611984945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561068a578181015183820152602001610672565b505050509050019250505060405180910390f35b610742600480360360208110156106b457600080fd5b810190602081018135600160201b8111156106ce57600080fd5b8201836020820111156106e057600080fd5b803590602001918460018302840111600160201b8311171561070157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a8e945050505050565b6040805161ffff9092168252519081900360200190f35b6107ff6004803603604081101561076f57600080fd5b810190602081018135600160201b81111561078957600080fd5b82018360208201111561079b57600080fd5b803590602001918460018302840111600160201b831117156107bc57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611ab8915050565b005b6104856004803603602081101561081757600080fd5b810190602081018135600160201b81111561083157600080fd5b82018360208201111561084357600080fd5b803590602001918460018302840111600160201b8311171561086457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611abc945050505050565b610949600480360360208110156108bb57600080fd5b810190602081018135600160201b8111156108d557600080fd5b8201836020820111156108e757600080fd5b803590602001918460018302840111600160201b8311171561090857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ae6945050505050565b6040805163ffffffff9092168252519081900360200190f35b6107ff6004803603606081101561097857600080fd5b810190602081018135600160201b81111561099257600080fd5b8201836020820111156109a457600080fd5b803590602001918460018302840111600160201b831117156109c557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610a1757600080fd5b820183602082011115610a2957600080fd5b803590602001918460018302840111600160201b83111715610a4a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611b10915050565b61053860048036036020811015610aa357600080fd5b810190602081018135600160201b811115610abd57600080fd5b820183602082011115610acf57600080fd5b803590602001918460208302840111600160201b83111715610af057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611b66945050505050565b61053860048036036040811015610b4457600080fd5b810190602081018135600160201b811115610b5e57600080fd5b820183602082011115610b7057600080fd5b803590602001918460018302840111600160201b83111715610b9157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903563ffffffff169150611b789050565b61053860048036036020811015610bf057600080fd5b50356001600160a01b0316611ead565b610cef600480360360e0811015610c1657600080fd5b810190808060600190600380602002604051908101604052809291908260036020028082843760009201919091525091949392602081019250359050600160201b811115610c6357600080fd5b820183602082011115610c7557600080fd5b803590602001918460208302840111600160201b83111715610c9657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383351693505061ffff602083013581169260400135169050612010565b604051808060200185151515158152602001846001600160a01b03166001600160a01b031681526020018361ffff1661ffff168152602001828103825286818151815260200191508051906020019080838360005b83811015610d5c578181015183820152602001610d44565b50505050905090810190601f168015610d895780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b610e3e60048036036020811015610db057600080fd5b810190602081018135600160201b811115610dca57600080fd5b820183602082011115610ddc57600080fd5b803590602001918460018302840111600160201b83111715610dfd57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061222f945050505050565b604080516001600160a01b039092168252519081900360200190f35b61053860048036036080811015610e7057600080fd5b810190602081018135600160201b811115610e8a57600080fd5b820183602082011115610e9c57600080fd5b803590602001918460208302840111600160201b83111715610ebd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505081356001600160a01b0316925050602081013561ffff169060400135612258565b610f1b6122b6565b6040805160ff9092168252519081900360200190f35b610cef60048036036080811015610f4757600080fd5b810190602081018135600160201b811115610f6157600080fd5b820183602082011115610f7357600080fd5b803590602001918460208302840111600160201b83111715610f9457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383351693505061ffff6020830135811692604001351690506122bb565b6105386004803603606081101561100357600080fd5b506001600160a01b038135169061ffff602082013516906040013561238f565b6107426004803603602081101561103957600080fd5b810190602081018135600160201b81111561105357600080fd5b82018360208201111561106557600080fd5b803590602001918460018302840111600160201b8311171561108657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061241d945050505050565b610538600480360360208110156110dd57600080fd5b50356001600160a01b0316612434565b610f1b6124fb565b610742612500565b610f1b612506565b6107426004803603602081101561111b57600080fd5b503561250b565b610cef6004803603608081101561113857600080fd5b810190602081018135600160201b81111561115257600080fd5b82018360208201111561116457600080fd5b803590602001918460208302840111600160201b8311171561118557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383351693505061ffff602083013581169260400135169050612540565b610949600480360360208110156111f457600080fd5b810190602081018135600160201b81111561120e57600080fd5b82018360208201111561122057600080fd5b803590602001918460018302840111600160201b8311171561124157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125f8945050505050565b6105386004803603604081101561129857600080fd5b810190602081018135600160201b8111156112b257600080fd5b8201836020820111156112c457600080fd5b803590602001918460018302840111600160201b831117156112e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061260f915050565b600081516000141561133c575060016113b2565b600080805b84518110156113a2578661ffff1685828151811061135b57fe5b602002602001015161ffff16141561137257600192505b8561ffff1685828151811061138357fe5b602002602001015161ffff16141561139a57600191505b600101611341565b508180156113ad5750805b925050505b9392505050565b60015460408051631788684160e11b815261ffff841660048201529051600092606092849283926001600160a01b031691632f10d082916024808301926020929190829003018186803b15801561140f57600080fd5b505afa158015611423573d6000803e3d6000fd5b505050506040513d602081101561143957600080fd5b50516040805160208181018352600080835283516001600160a01b038616602480830191909152855180830390910181526044909101855291820180516001600160e01b0316635c806e0160e11b178152935182519398509495509330939192909182918083835b602083106114c05780518252601f1990920191602091820191016114a1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611520576040519150601f19603f3d011682016040523d82523d6000602084013e611525565b606091505b50509050801561153f5761153882612434565b935061162f565b604080516001600160a01b03841660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663244041d360e21b17815291518151600093309392918291908083835b602083106115b25780518252601f199092019160209182019101611593565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611612576040519150601f19603f3d011682016040523d82523d6000602084013e611617565b606091505b50509050801561162d5761162a83611ead565b94505b505b8184836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561166a57600080fd5b505afa15801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b505191989097509095509350505050565b600080607060ff168351816116b657fe5b600154604080516343383ac360e01b81526001600160a01b038a811660048301529490930461ffff811660248501529051909450606093909116916343383ac3916044808301926000929190829003018186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561175357600080fd5b810190808051600160201b81111561176a57600080fd5b8201602081018481111561177d57600080fd5b8151600160201b81118282018710171561179657600080fd5b50909450889350899250600091508190505b8582101561191657600154604080516001600160a01b03868116602483015261ffff881660448084019190915283518084039091018152606490920183526020820180516001600160e01b031663793b8c6d60e01b17815292518251600095606095931693611388939092918291908083835b6020831061183a5780518252601f19909201916020918201910161181b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303818686fa925050503d806000811461189b576040519150601f19603f3d011682016040523d82523d6000602084013e6118a0565b606091505b509150915081156118cd57600195909501946118c28d86838d60708902612664565b60018401935061190f565b86516000965060148481020111611908576118fb6118f68860148681029063ffffffff61295916565b61222f565b945060018301925061190f565b5050611916565b50506117a8565b509998505050505050505050565b606080611936836000806113886122bb565b50508151919250506208b2901161197e5760405162461bcd60e51b8152600401808060200182810382526031815260200180612c176031913960400191505060405180910390fd5b92915050565b60608082516040519080825280602002602001820160405280156119b2578160200160208202803883390190505b50905060005b8351811015611a875760015484516001600160a01b039091169063ef574d23908690849081106119e457fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a3257600080fd5b505afa158015611a46573d6000803e3d6000fd5b505050506040513d6020811015611a5c57600080fd5b50518251839083908110611a6c57fe5b61ffff909216602092830291909101909101526001016119b8565b5092915050565b60006060611aa5836036600263ffffffff61295916565b90506113b281600063ffffffff6129d916565b9052565b60006060611ad3836014603463ffffffff61295916565b90506113b281600063ffffffff6129f516565b60006060611afd83603c600463ffffffff61295916565b90506113b281600063ffffffff612a1116565b60005b8351811015611b6057838181518110611b2857fe5b602001015160f81c60f81b8382840181518110611b4157fe5b60200101906001600160f81b031916908160001a905350600101611b13565b50505050565b60608061193683600080611388612540565b60606000611b858461222f565b90506000611b9285611a8e565b60015460408051631788684160e11b815261ffff8416600482015290519293506000926001600160a01b0390921691632f10d08291602480820192602092909190829003018186803b158015611be757600080fd5b505afa158015611bfb573d6000803e3d6000fd5b505050506040513d6020811015611c1157600080fd5b505190506000611c2087611abc565b6001546040805163b3c0afa160e01b81526001600160a01b038881166004830152868116602483015282519495506000948594919091169263b3c0afa19260448082019391829003018186803b158015611c7957600080fd5b505afa158015611c8d573d6000803e3d6000fd5b505050506040513d6040811015611ca357600080fd5b50805160209182015160015460408051637390564760e11b815290519396509194506001600160a01b03169263e720ac8e92600480840193829003018186803b158015611cef57600080fd5b505afa158015611d03573d6000803e3d6000fd5b505050506040513d6020811015611d1957600080fd5b505163ffffffff90811690821610801590611d3f57508763ffffffff168163ffffffff16105b15611d5757611d54838363ffffffff612a2d16565b92505b6001546040805163619f5cfb60e11b81526001600160a01b03898116600483015287811660248301528251600094859492169263c33eb9f6926044808301939192829003018186803b158015611dac57600080fd5b505afa158015611dc0573d6000803e3d6000fd5b505050506040513d6040811015611dd657600080fd5b50805160209182015160015460408051637390564760e11b815290519396509194506001600160a01b03169263e720ac8e92600480840193829003018186803b158015611e2257600080fd5b505afa158015611e36573d6000803e3d6000fd5b505050506040513d6020811015611e4c57600080fd5b505163ffffffff90811690821610801590611e7257508963ffffffff168163ffffffff16105b15611e9457611e91611e848684612a87565b869063ffffffff612a9d16565b94505b611e9e8b8661260f565b9b9a5050505050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b1781529151815160609360009385936001600160a01b03881693919290918291908083835b60208310611f165780518252601f199092019160209182019101611ef7565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611f76576040519150601f19603f3d011682016040523d82523d6000602084013e611f7b565b606091505b509150915081611fc6576040805162461bcd60e51b815260206004820152601160248201527010d85b9b9bdd0819d95d081cde5b589bdb607a1b604482015290519081900360640190fd5b60005b815181101561200857818181518110611fde57fe5b01602001516001600160f81b03191661200057611ffb8282611ab8565b612008565b600101611fc9565b509392505050565b60606000806000607060020160ff168561ffff16026040519080825280601f01601f19166020018201604052801561204f576020820181803883390190505b50935061205d846000611ab8565b6040805161ffff8716607002808252601f19601f82011682016020019092526060918015612092576020820181803883390190505b5090508792508691506001935060005a90505b8480156120b75750806003025a600502115b15612220575a905060006120cd8b8686866116a5565b61ffff891681149650905060005b818161ffff1610156122195760606120fc85607061ffff8516810290612959565b905061210f818f60026020020151611b78565b9050600061211c8261222f565b9050876001600160a01b0316816001600160a01b031614156121435760018701965061214b565b600196508097505b612154826125f8565b8f5163ffffffff918216911610801590612189575061217282611ae6565b63ffffffff168f6001602002015163ffffffff1611155b156121f057895161219e908b90607201611ab8565b89516121b19083908c9060711901611b10565b604080516001600160f01b03196000198a0160f01b1660208201528151808203600201815260229091019091528a516121f091908c9060011901611b10565b895161ffff60728d02161161220f575060019750612223945050505050565b50506001016120db565b50506120a5565b50505b95509550955095915050565b600060606122458383601463ffffffff61295916565b90506113b281600063ffffffff612adf16565b606080607060ff1683026040519080825280601f01601f19166020018201604052801561228c576020820181803883390190505b509050600061229d878787856116a5565b90506122ac8260708302611ab8565b5095945050505050565b607281565b6060600080600080600160009054906101000a90046001600160a01b03166001600160a01b031663e720ac8e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561231157600080fd5b505afa158015612325573d6000803e3d6000fd5b505050506040513d602081101561233b57600080fd5b50516040805160608101825263ffffffff60001984018116808352602083015283169181019190915290915061237c906123748b611984565b8a8a8a612010565b929c919b50995090975095505050505050565b6060612415600080548060200260200160405190810160405280929190818152602001828054801561240857602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116123cf5790505b5050505050858585612258565b949350505050565b60006060611aa5836034600263ffffffff61295916565b6060816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561246f57600080fd5b505afa158015612483573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156124ac57600080fd5b810190808051600160201b8111156124c357600080fd5b820160208101848111156124d657600080fd5b8151600160201b8111828201871017156124ef57600080fd5b50909695505050505050565b601481565b61138881565b607081565b6000818154811061251857fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060600080600080600160009054906101000a90046001600160a01b03166001600160a01b031663e720ac8e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561259657600080fd5b505afa1580156125aa573d6000803e3d6000fd5b505050506040513d60208110156125c057600080fd5b50516040805160608101825263ffffffff808416808352602083015260018401169181019190915290915061237c906123748b611984565b60006060611afd836038600463ffffffff61295916565b60606113b2612627846034603c63ffffffff61295916565b604080516020808201879052825180830390910181529082019091526126589081876000601463ffffffff61295916565b9063ffffffff612b0216565b60008060008060008060008980602001905160e081101561268457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050965096509650965096509650965061271e8b60405160200180826001600160a01b03166001600160a01b031660601b81526014019150506040516020818303038152906040528a8a611b10565b61272987878e611328565b1561290b57600081830390506000600160009054906101000a90046001600160a01b03166001600160a01b031663d4fac45d8e600160009054906101000a90046001600160a01b03166001600160a01b0316632f10d0828c6040518263ffffffff1660e01b8152600401808261ffff1661ffff16815260200191505060206040518083038186803b1580156127bd57600080fd5b505afa1580156127d1573d6000803e3d6000fd5b505050506040513d60208110156127e757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b15801561283757600080fd5b505afa15801561284b573d6000803e3d6000fd5b505050506040513d602081101561286157600080fd5b505160408051602081018390526001600160f01b031960f08d811b8216838501528c901b1660428201526001600160e01b031960e08b811b821660448401528a901b1660488201526fffffffffffffffffffffffffffffffff19608089811b8216604c84015288811b8216605c808501919091529087901b909116606c83015282518083039091018152607c909101909152909150612904908c60148d01611b10565b505061294b565b60145b607081101561294957600060f81b8a8a83018151811061292a57fe5b60200101906001600160f81b031916908160001a90535060010161290e565b505b505050505050505050505050565b60608183018451101561296b57600080fd5b606082158015612986576040519150602082016040526129d0565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156129bf5780518352602092830192016129a7565b5050858452601f01601f1916604052505b50949350505050565b600081600201835110156129ec57600080fd5b50016002015190565b60008160200183511015612a0857600080fd5b50016020015190565b60008160040183511015612a2457600080fd5b50016004015190565b6000828201838110156113b2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818310612a9657816113b2565b5090919050565b60006113b283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b7f565b60008160140183511015612af257600080fd5b500160200151600160601b900490565b6060806040519050835180825260208201818101602087015b81831015612b33578051835260209283019201612b1b565b50855184518101855292509050808201602086015b81831015612b60578051835260209283019201612b48565b508651929092011591909101601f01601f191660405250905092915050565b60008184841115612c0e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bd3578181015183820152602001612bbb565b50505050905090810190601f168015612c005780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f72646572626f6f6b20746f6f206c617267652c2075736520706167696e6174656420766965772066756e6374696f6e73a265627a7a723058205afc3e4fa5d61c467c1160416b4d3a6e9be54f8d72618efd342d13d36add1d7f64736f6c634300050a0032","contractName":"BatchExchangeViewer","devdoc":{"methods":{"getEncodedOrdersPaginated(address,uint16,uint256)":{"details":"View returning byte-encoded sell orders in paginated form. It has the same behavior as BatchExchange.getEncodedUsersPaginated but uses less memory and thus is more gas efficient.","params":{"pageSize":"uint determining the count of orders to be returned per page","previousPageUser":"address of last user received in the previous page (address(0) for first page)","previousPageUserOffset":"the number of orders received for the last user on the previous page (0 for first page)."},"return":"encoded bytes representing a page of orders ordered by (user, index)"},"getFilteredOrdersPaginated(uint32[3],uint16[],address,uint16,uint16)":{"details":"Queries a page in the list of all orders","params":{"batchIds":"Triple with the following values [maxValidFrom, minValidUntil, sellBalanceTargetBatchIndex] Batched together as we are running out of local variables (Solidity does not compile with Stack too deep error) - maxValidFrom: all returned orders will have a validFrom <= this value (they were placed at or before that batch) - minValidUntil all returned orders will have a validUntil >= this value (validity ends at or after that batch) - sellBalanceTargetBatchIndex the batchIndex at which we are expecting the sellTokenBalance to be valid (e.g. in the current live orderbook we want to include sellBalances that are valid in currentBatch + 1).","maxPageSize":"maximum count of elements to be returned per page (same value is used for subqueries on the exchange)","previousPageUser":"address taken from nextPageUser return value from last page (address(0) for first page)","previousPageUserOffset":"offset taken nextPageUserOffset return value from last page (0 for first page)","tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders and page information for next page. Result can contain less elements than maxPageSize if remaining gas is low."},"getFinalizedOrderBook(address[])":{"details":"Queries the orderbook for the auction that is currently being solved","params":{"tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders, maxed at 5000 elements"},"getFinalizedOrderBookPaginated(address[],address,uint16,uint16)":{"details":"Queries a page of the orderbook for the auction that is currently being solved","params":{"maxPageSize":"count of elements to be returned per page (same value is used for subqueries on the exchange)","previousPageUser":"address taken from nextPageUser return value from last page (address(0) for first page)","previousPageUserOffset":"offset taken nextPageUserOffset return value from last page (0 for first page)","tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders and page information for next page"},"getOpenOrderBook(address[])":{"details":"Queries the orderbook for the auction that is still accepting orders","params":{"tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders, maxed at 5000 elements"},"getOpenOrderBookPaginated(address[],address,uint16,uint16)":{"details":"Queries a page of the orderbook for the auction that is still accepting orders","params":{"maxPageSize":"count of elements to be returned per page (same value is used for subqueries on the exchange)","previousPageUser":"address taken from nextPageUser return value from last page (address(0) for first page)","previousPageUserOffset":"offset taken nextPageUserOffset return value from last page (0 for first page)","tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders and page information for next page"},"getTokenInfo(uint16)":{"details":"Queries the token information for the given tokenId. Can handle symbols of type string and bytes (e.g. MKR). Returns \"Unknown\" as symbol value if it cannot be retrieved and reverts if decimals can not be fetched (to avoid ambiguity with a \"valid\" value).","params":{"tokenId":"the ID of a token listed on BatchExchange"},"return":"the address, symbol and decimals of the token contract"},"getTokenSymbolBytes(address)":{"details":"returns the symbol() of the given address assuming it is returned as a bytes. Reverts if method does not exist or returns data that cannot be casted into a string.","params":{"token":"the token address from which to receive the symbol"},"return":"the token's symbol converted into a trimmed (trailing 0 bytes remove) string."},"getTokenSymbolString(address)":{"details":"returns the symbol() of the given address assuming it is returned as a string. Reverts if method does not exist or returns data that is not a valid string.","params":{"token":"the token address from which to receive the symbol"},"return":"the token's symbol"},"setLength(bytes,uint256)":{"details":"Sets the length of the given buffer (truncating any items exceeding the length). Note, that this can lead to memory leakage or undefined behavior if length is larger than the size that was originally allocated by the buffer."}}},"networks":{"1":{"address":"0x7D071fb584b51D9c38572A04E1848afd835cD457","links":{},"transactionHash":"0xd1be3b9bfc2bab273e3893ebc56c2925c2e41ab70d96694705bd90dbedcfd1c3"},"4":{"address":"0x0A7a7E35098b5F969E5d45680827AC478e6e8Ce3","links":{},"transactionHash":"0x0e2ea4e0550d0b960aacc10576ac7e07c5285696f08a0b4b8f608f5b3f098a4f"}},"userdoc":{"methods":{}}} \ No newline at end of file +{"abi":[{"constant":true,"inputs":[],"name":"INDEXED_AUCTION_ELEMENT_WIDTH","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ADDRESS_WIDTH","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LARGE_PAGE_SIZE","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AUCTION_ELEMENT_WIDTH","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"ALL_TOKEN_FILTER","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"exchange","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"address[]"}],"name":"getOpenOrderBook","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"address[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"maxPageSize","type":"uint16"}],"name":"getOpenOrderBookPaginated","outputs":[{"name":"elements","type":"bytes"},{"name":"hasNextPage","type":"bool"},{"name":"nextPageUser","type":"address"},{"name":"nextPageUserOffset","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"address[]"}],"name":"getFinalizedOrderBook","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"address[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"maxPageSize","type":"uint16"}],"name":"getFinalizedOrderBookPaginated","outputs":[{"name":"elements","type":"bytes"},{"name":"hasNextPage","type":"bool"},{"name":"nextPageUser","type":"address"},{"name":"nextPageUserOffset","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"batchIds","type":"uint32[3]"},{"name":"tokenFilter","type":"uint16[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"maxPageSize","type":"uint16"}],"name":"getFilteredOrdersPaginated","outputs":[{"name":"elements","type":"bytes"},{"name":"hasNextPage","type":"bool"},{"name":"nextPageUser","type":"address"},{"name":"nextPageUserOffset","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"pageSize","type":"uint256"}],"name":"getEncodedOrdersPaginated","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"uint16[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"pageSize","type":"uint256"}],"name":"getEncodedOrdersPaginatedWithTokenFilter","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenFilter","type":"uint16[]"},{"name":"previousPageUser","type":"address"},{"name":"previousPageUserOffset","type":"uint16"},{"name":"elements","type":"bytes"}],"name":"writeEncodedOrdersPaginatedWithTokenFilter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"buyToken","type":"uint16"},{"name":"sellToken","type":"uint16"},{"name":"filter","type":"uint16[]"}],"name":"matchesTokenFilter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getUser","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getSellTokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"},{"name":"amount","type":"uint256"}],"name":"updateSellTokenBalance","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getBuyToken","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getSellToken","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getValidFrom","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"}],"name":"getValidUntil","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"tokenIds","type":"address[]"}],"name":"getTokenIdsFromAdresses","outputs":[{"name":"","type":"uint16[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"element","type":"bytes"},{"name":"targetBatchIndex","type":"uint32"}],"name":"updateSellTokenBalanceForBatchId","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint16"}],"name":"getTokenInfo","outputs":[{"name":"","type":"address"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getTokenSymbolString","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"token","type":"address"}],"name":"getTokenSymbolBytes","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"buffer","type":"bytes"},{"name":"length","type":"uint256"}],"name":"setLength","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"source","type":"bytes"},{"name":"destination","type":"bytes"},{"name":"offset","type":"uint256"}],"name":"copyInPlace","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b50604051612cdf380380612cdf8339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612c7c806100636000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063970957bb116100f9578063d08f722811610097578063e9469eb111610071578063e9469eb114611105578063e9d98f0914611122578063f469c116146111de578063fa55171614611282576101c4565b8063d08f7228146110ed578063d615388a146110f5578063d9d80082146110fd576101c4565b8063a94a3df9116100d3578063a94a3df914610f31578063b0c1926514610fed578063b54810fd14611023578063b900dc02146110c7576101c4565b8063970957bb14610d9a5780639e47107514610e5a578063a8ef264214610f13576101c4565b80636d7e99d1116101665780637c40a1b3116101405780637c40a1b314610a8d5780637c66b49314610b2e5780639101074c14610bda578063951b13f114610c00576101c4565b80636d7e99d1146108015780636df5a662146108a557806376137caa14610962576101c4565b8063348ae418116101a2578063348ae4181461049757806334e59fa6146105ad5780633b4c5f1b1461069e57806352b8dfc514610759576101c4565b80630ce0f677146101c95780631c58e7931461029257806329258dee14610346575b600080fd5b61027e600480360360608110156101df57600080fd5b61ffff8235811692602081013590911691810190606081016040820135600160201b81111561020d57600080fd5b82018360208201111561021f57600080fd5b803590602001918460208302840111600160201b8311171561024057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611328945050505050565b604080519115158252519081900360200190f35b6102b3600480360360208110156102a857600080fd5b503561ffff166113b9565b604080516001600160a01b038516815260ff831691810191909152606060208083018281528551928401929092528451608084019186019080838360005b838110156103095781810151838201526020016102f1565b50505050905090810190601f1680156103365780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b6104856004803603608081101561035c57600080fd5b810190602081018135600160201b81111561037657600080fd5b82018360208201111561038857600080fd5b803590602001918460208302840111600160201b831117156103a957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092956001600160a01b038535169561ffff60208701351695919450925060608101915060400135600160201b81111561041157600080fd5b82018360208201111561042357600080fd5b803590602001918460018302840111600160201b8311171561044457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116a5945050505050565b60408051918252519081900360200190f35b610538600480360360208110156104ad57600080fd5b810190602081018135600160201b8111156104c757600080fd5b8201836020820111156104d957600080fd5b803590602001918460208302840111600160201b831117156104fa57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611924945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561057257818101518382015260200161055a565b50505050905090810190601f16801561059f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61064e600480360360208110156105c357600080fd5b810190602081018135600160201b8111156105dd57600080fd5b8201836020820111156105ef57600080fd5b803590602001918460208302840111600160201b8311171561061057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611984945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561068a578181015183820152602001610672565b505050509050019250505060405180910390f35b610742600480360360208110156106b457600080fd5b810190602081018135600160201b8111156106ce57600080fd5b8201836020820111156106e057600080fd5b803590602001918460018302840111600160201b8311171561070157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a8e945050505050565b6040805161ffff9092168252519081900360200190f35b6107ff6004803603604081101561076f57600080fd5b810190602081018135600160201b81111561078957600080fd5b82018360208201111561079b57600080fd5b803590602001918460018302840111600160201b831117156107bc57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611ab8915050565b005b6104856004803603602081101561081757600080fd5b810190602081018135600160201b81111561083157600080fd5b82018360208201111561084357600080fd5b803590602001918460018302840111600160201b8311171561086457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611abc945050505050565b610949600480360360208110156108bb57600080fd5b810190602081018135600160201b8111156108d557600080fd5b8201836020820111156108e757600080fd5b803590602001918460018302840111600160201b8311171561090857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ae6945050505050565b6040805163ffffffff9092168252519081900360200190f35b6107ff6004803603606081101561097857600080fd5b810190602081018135600160201b81111561099257600080fd5b8201836020820111156109a457600080fd5b803590602001918460018302840111600160201b831117156109c557600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610a1757600080fd5b820183602082011115610a2957600080fd5b803590602001918460018302840111600160201b83111715610a4a57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611b10915050565b61053860048036036020811015610aa357600080fd5b810190602081018135600160201b811115610abd57600080fd5b820183602082011115610acf57600080fd5b803590602001918460208302840111600160201b83111715610af057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611b66945050505050565b61053860048036036040811015610b4457600080fd5b810190602081018135600160201b811115610b5e57600080fd5b820183602082011115610b7057600080fd5b803590602001918460018302840111600160201b83111715610b9157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903563ffffffff169150611b789050565b61053860048036036020811015610bf057600080fd5b50356001600160a01b0316611ead565b610cef600480360360e0811015610c1657600080fd5b810190808060600190600380602002604051908101604052809291908260036020028082843760009201919091525091949392602081019250359050600160201b811115610c6357600080fd5b820183602082011115610c7557600080fd5b803590602001918460208302840111600160201b83111715610c9657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383351693505061ffff602083013581169260400135169050612010565b604051808060200185151515158152602001846001600160a01b03166001600160a01b031681526020018361ffff1661ffff168152602001828103825286818151815260200191508051906020019080838360005b83811015610d5c578181015183820152602001610d44565b50505050905090810190601f168015610d895780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b610e3e60048036036020811015610db057600080fd5b810190602081018135600160201b811115610dca57600080fd5b820183602082011115610ddc57600080fd5b803590602001918460018302840111600160201b83111715610dfd57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061222f945050505050565b604080516001600160a01b039092168252519081900360200190f35b61053860048036036080811015610e7057600080fd5b810190602081018135600160201b811115610e8a57600080fd5b820183602082011115610e9c57600080fd5b803590602001918460208302840111600160201b83111715610ebd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505081356001600160a01b0316925050602081013561ffff169060400135612258565b610f1b6122b6565b6040805160ff9092168252519081900360200190f35b610cef60048036036080811015610f4757600080fd5b810190602081018135600160201b811115610f6157600080fd5b820183602082011115610f7357600080fd5b803590602001918460208302840111600160201b83111715610f9457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383351693505061ffff6020830135811692604001351690506122bb565b6105386004803603606081101561100357600080fd5b506001600160a01b038135169061ffff602082013516906040013561238f565b6107426004803603602081101561103957600080fd5b810190602081018135600160201b81111561105357600080fd5b82018360208201111561106557600080fd5b803590602001918460018302840111600160201b8311171561108657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061241d945050505050565b610538600480360360208110156110dd57600080fd5b50356001600160a01b0316612434565b610f1b6124fb565b610742612500565b610f1b612506565b6107426004803603602081101561111b57600080fd5b503561250b565b610cef6004803603608081101561113857600080fd5b810190602081018135600160201b81111561115257600080fd5b82018360208201111561116457600080fd5b803590602001918460208302840111600160201b8311171561118557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550506001600160a01b0383351693505061ffff602083013581169260400135169050612540565b610949600480360360208110156111f457600080fd5b810190602081018135600160201b81111561120e57600080fd5b82018360208201111561122057600080fd5b803590602001918460018302840111600160201b8311171561124157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125f8945050505050565b6105386004803603604081101561129857600080fd5b810190602081018135600160201b8111156112b257600080fd5b8201836020820111156112c457600080fd5b803590602001918460018302840111600160201b831117156112e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061260f915050565b600081516000141561133c575060016113b2565b600080805b84518110156113a2578661ffff1685828151811061135b57fe5b602002602001015161ffff16141561137257600192505b8561ffff1685828151811061138357fe5b602002602001015161ffff16141561139a57600191505b600101611341565b508180156113ad5750805b925050505b9392505050565b60015460408051631788684160e11b815261ffff841660048201529051600092606092849283926001600160a01b031691632f10d082916024808301926020929190829003018186803b15801561140f57600080fd5b505afa158015611423573d6000803e3d6000fd5b505050506040513d602081101561143957600080fd5b50516040805160208181018352600080835283516001600160a01b038616602480830191909152855180830390910181526044909101855291820180516001600160e01b0316635c806e0160e11b178152935182519398509495509330939192909182918083835b602083106114c05780518252601f1990920191602091820191016114a1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611520576040519150601f19603f3d011682016040523d82523d6000602084013e611525565b606091505b50509050801561153f5761153882612434565b935061162f565b604080516001600160a01b03841660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663244041d360e21b17815291518151600093309392918291908083835b602083106115b25780518252601f199092019160209182019101611593565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611612576040519150601f19603f3d011682016040523d82523d6000602084013e611617565b606091505b50509050801561162d5761162a83611ead565b94505b505b8184836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561166a57600080fd5b505afa15801561167e573d6000803e3d6000fd5b505050506040513d602081101561169457600080fd5b505191989097509095509350505050565b600080607060ff168351816116b657fe5b600154604080516343383ac360e01b81526001600160a01b038a811660048301529490930461ffff811660248501529051909450606093909116916343383ac3916044808301926000929190829003018186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561175357600080fd5b810190808051600160201b81111561176a57600080fd5b8201602081018481111561177d57600080fd5b8151600160201b81118282018710171561179657600080fd5b50909450889350899250600091508190505b8582101561191657600154604080516001600160a01b03868116602483015261ffff881660448084019190915283518084039091018152606490920183526020820180516001600160e01b031663793b8c6d60e01b17815292518251600095606095931693611388939092918291908083835b6020831061183a5780518252601f19909201916020918201910161181b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303818686fa925050503d806000811461189b576040519150601f19603f3d011682016040523d82523d6000602084013e6118a0565b606091505b509150915081156118cd57600195909501946118c28d86838d60708902612664565b60018401935061190f565b86516000965060148481020111611908576118fb6118f68860148681029063ffffffff61295916565b61222f565b945060018301925061190f565b5050611916565b50506117a8565b509998505050505050505050565b606080611936836000806113886122bb565b50508151919250506208b2901161197e5760405162461bcd60e51b8152600401808060200182810382526031815260200180612c176031913960400191505060405180910390fd5b92915050565b60608082516040519080825280602002602001820160405280156119b2578160200160208202803883390190505b50905060005b8351811015611a875760015484516001600160a01b039091169063ef574d23908690849081106119e457fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a3257600080fd5b505afa158015611a46573d6000803e3d6000fd5b505050506040513d6020811015611a5c57600080fd5b50518251839083908110611a6c57fe5b61ffff909216602092830291909101909101526001016119b8565b5092915050565b60006060611aa5836036600263ffffffff61295916565b90506113b281600063ffffffff6129d916565b9052565b60006060611ad3836014603463ffffffff61295916565b90506113b281600063ffffffff6129f516565b60006060611afd83603c600463ffffffff61295916565b90506113b281600063ffffffff612a1116565b60005b8351811015611b6057838181518110611b2857fe5b602001015160f81c60f81b8382840181518110611b4157fe5b60200101906001600160f81b031916908160001a905350600101611b13565b50505050565b60608061193683600080611388612540565b60606000611b858461222f565b90506000611b9285611a8e565b60015460408051631788684160e11b815261ffff8416600482015290519293506000926001600160a01b0390921691632f10d08291602480820192602092909190829003018186803b158015611be757600080fd5b505afa158015611bfb573d6000803e3d6000fd5b505050506040513d6020811015611c1157600080fd5b505190506000611c2087611abc565b6001546040805163b3c0afa160e01b81526001600160a01b038881166004830152868116602483015282519495506000948594919091169263b3c0afa19260448082019391829003018186803b158015611c7957600080fd5b505afa158015611c8d573d6000803e3d6000fd5b505050506040513d6040811015611ca357600080fd5b50805160209182015160015460408051637390564760e11b815290519396509194506001600160a01b03169263e720ac8e92600480840193829003018186803b158015611cef57600080fd5b505afa158015611d03573d6000803e3d6000fd5b505050506040513d6020811015611d1957600080fd5b505163ffffffff90811690821610801590611d3f57508763ffffffff168163ffffffff16105b15611d5757611d54838363ffffffff612a2d16565b92505b6001546040805163619f5cfb60e11b81526001600160a01b03898116600483015287811660248301528251600094859492169263c33eb9f6926044808301939192829003018186803b158015611dac57600080fd5b505afa158015611dc0573d6000803e3d6000fd5b505050506040513d6040811015611dd657600080fd5b50805160209182015160015460408051637390564760e11b815290519396509194506001600160a01b03169263e720ac8e92600480840193829003018186803b158015611e2257600080fd5b505afa158015611e36573d6000803e3d6000fd5b505050506040513d6020811015611e4c57600080fd5b505163ffffffff90811690821610801590611e7257508963ffffffff168163ffffffff16105b15611e9457611e91611e848684612a87565b869063ffffffff612a9d16565b94505b611e9e8b8661260f565b9b9a5050505050505050505050565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b1781529151815160609360009385936001600160a01b03881693919290918291908083835b60208310611f165780518252601f199092019160209182019101611ef7565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611f76576040519150601f19603f3d011682016040523d82523d6000602084013e611f7b565b606091505b509150915081611fc6576040805162461bcd60e51b815260206004820152601160248201527010d85b9b9bdd0819d95d081cde5b589bdb607a1b604482015290519081900360640190fd5b60005b815181101561200857818181518110611fde57fe5b01602001516001600160f81b03191661200057611ffb8282611ab8565b612008565b600101611fc9565b509392505050565b60606000806000607060020160ff168561ffff16026040519080825280601f01601f19166020018201604052801561204f576020820181803883390190505b50935061205d846000611ab8565b6040805161ffff8716607002808252601f19601f82011682016020019092526060918015612092576020820181803883390190505b5090508792508691506001935060005a90505b8480156120b75750806003025a600502115b15612220575a905060006120cd8b8686866116a5565b61ffff891681149650905060005b818161ffff1610156122195760606120fc85607061ffff8516810290612959565b905061210f818f60026020020151611b78565b9050600061211c8261222f565b9050876001600160a01b0316816001600160a01b031614156121435760018701965061214b565b600196508097505b612154826125f8565b8f5163ffffffff918216911610801590612189575061217282611ae6565b63ffffffff168f6001602002015163ffffffff1611155b156121f057895161219e908b90607201611ab8565b89516121b19083908c9060711901611b10565b604080516001600160f01b03196000198a0160f01b1660208201528151808203600201815260229091019091528a516121f091908c9060011901611b10565b895161ffff60728d02161161220f575060019750612223945050505050565b50506001016120db565b50506120a5565b50505b95509550955095915050565b600060606122458383601463ffffffff61295916565b90506113b281600063ffffffff612adf16565b606080607060ff1683026040519080825280601f01601f19166020018201604052801561228c576020820181803883390190505b509050600061229d878787856116a5565b90506122ac8260708302611ab8565b5095945050505050565b607281565b6060600080600080600160009054906101000a90046001600160a01b03166001600160a01b031663e720ac8e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561231157600080fd5b505afa158015612325573d6000803e3d6000fd5b505050506040513d602081101561233b57600080fd5b50516040805160608101825263ffffffff60001984018116808352602083015283169181019190915290915061237c906123748b611984565b8a8a8a612010565b929c919b50995090975095505050505050565b6060612415600080548060200260200160405190810160405280929190818152602001828054801561240857602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116123cf5790505b5050505050858585612258565b949350505050565b60006060611aa5836034600263ffffffff61295916565b6060816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561246f57600080fd5b505afa158015612483573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156124ac57600080fd5b810190808051600160201b8111156124c357600080fd5b820160208101848111156124d657600080fd5b8151600160201b8111828201871017156124ef57600080fd5b50909695505050505050565b601481565b61138881565b607081565b6000818154811061251857fe5b9060005260206000209060109182820401919006600202915054906101000a900461ffff1681565b6060600080600080600160009054906101000a90046001600160a01b03166001600160a01b031663e720ac8e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561259657600080fd5b505afa1580156125aa573d6000803e3d6000fd5b505050506040513d60208110156125c057600080fd5b50516040805160608101825263ffffffff808416808352602083015260018401169181019190915290915061237c906123748b611984565b60006060611afd836038600463ffffffff61295916565b60606113b2612627846034603c63ffffffff61295916565b604080516020808201879052825180830390910181529082019091526126589081876000601463ffffffff61295916565b9063ffffffff612b0216565b60008060008060008060008980602001905160e081101561268457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050965096509650965096509650965061271e8b60405160200180826001600160a01b03166001600160a01b031660601b81526014019150506040516020818303038152906040528a8a611b10565b61272987878e611328565b1561290b57600081830390506000600160009054906101000a90046001600160a01b03166001600160a01b031663d4fac45d8e600160009054906101000a90046001600160a01b03166001600160a01b0316632f10d0828c6040518263ffffffff1660e01b8152600401808261ffff1661ffff16815260200191505060206040518083038186803b1580156127bd57600080fd5b505afa1580156127d1573d6000803e3d6000fd5b505050506040513d60208110156127e757600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b15801561283757600080fd5b505afa15801561284b573d6000803e3d6000fd5b505050506040513d602081101561286157600080fd5b505160408051602081018390526001600160f01b031960f08d811b8216838501528c901b1660428201526001600160e01b031960e08b811b821660448401528a901b1660488201526fffffffffffffffffffffffffffffffff19608089811b8216604c84015288811b8216605c808501919091529087901b909116606c83015282518083039091018152607c909101909152909150612904908c60148d01611b10565b505061294b565b60145b607081101561294957600060f81b8a8a83018151811061292a57fe5b60200101906001600160f81b031916908160001a90535060010161290e565b505b505050505050505050505050565b60608183018451101561296b57600080fd5b606082158015612986576040519150602082016040526129d0565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156129bf5780518352602092830192016129a7565b5050858452601f01601f1916604052505b50949350505050565b600081600201835110156129ec57600080fd5b50016002015190565b60008160200183511015612a0857600080fd5b50016020015190565b60008160040183511015612a2457600080fd5b50016004015190565b6000828201838110156113b2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000818310612a9657816113b2565b5090919050565b60006113b283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b7f565b60008160140183511015612af257600080fd5b500160200151600160601b900490565b6060806040519050835180825260208201818101602087015b81831015612b33578051835260209283019201612b1b565b50855184518101855292509050808201602086015b81831015612b60578051835260209283019201612b48565b508651929092011591909101601f01601f191660405250905092915050565b60008184841115612c0e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612bd3578181015183820152602001612bbb565b50505050905090810190601f168015612c005780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50505090039056fe4f72646572626f6f6b20746f6f206c617267652c2075736520706167696e6174656420766965772066756e6374696f6e73a265627a7a72305820c35583c4bb260dd32caedd61be24cb58348eff704e8a9cfc0ff3a2329442028a64736f6c634300050a0032","contractName":"BatchExchangeViewer","devdoc":{"methods":{"getEncodedOrdersPaginated(address,uint16,uint256)":{"details":"View returning byte-encoded sell orders in paginated form. It has the same behavior as BatchExchange.getEncodedUsersPaginated but uses less memory and thus is more gas efficient.","params":{"pageSize":"uint determining the count of orders to be returned per page","previousPageUser":"address of last user received in the previous page (address(0) for first page)","previousPageUserOffset":"the number of orders received for the last user on the previous page (0 for first page)."},"return":"encoded bytes representing a page of orders ordered by (user, index)"},"getFilteredOrdersPaginated(uint32[3],uint16[],address,uint16,uint16)":{"details":"Queries a page in the list of all orders","params":{"batchIds":"Triple with the following values [maxValidFrom, minValidUntil, sellBalanceTargetBatchIndex] Batched together as we are running out of local variables (Solidity does not compile with Stack too deep error) - maxValidFrom: all returned orders will have a validFrom <= this value (they were placed at or before that batch) - minValidUntil all returned orders will have a validUntil >= this value (validity ends at or after that batch) - sellBalanceTargetBatchIndex the batchIndex at which we are expecting the sellTokenBalance to be valid (e.g. in the current live orderbook we want to include sellBalances that are valid in currentBatch + 1).","maxPageSize":"maximum count of elements to be returned per page (same value is used for subqueries on the exchange)","previousPageUser":"address taken from nextPageUser return value from last page (address(0) for first page)","previousPageUserOffset":"offset taken nextPageUserOffset return value from last page (0 for first page)","tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders and page information for next page. Result can contain less elements than maxPageSize if remaining gas is low."},"getFinalizedOrderBook(address[])":{"details":"Queries the orderbook for the auction that is currently being solved","params":{"tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders, maxed at 5000 elements"},"getFinalizedOrderBookPaginated(address[],address,uint16,uint16)":{"details":"Queries a page of the orderbook for the auction that is currently being solved","params":{"maxPageSize":"count of elements to be returned per page (same value is used for subqueries on the exchange)","previousPageUser":"address taken from nextPageUser return value from last page (address(0) for first page)","previousPageUserOffset":"offset taken nextPageUserOffset return value from last page (0 for first page)","tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders and page information for next page"},"getOpenOrderBook(address[])":{"details":"Queries the orderbook for the auction that is still accepting orders","params":{"tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders, maxed at 5000 elements"},"getOpenOrderBookPaginated(address[],address,uint16,uint16)":{"details":"Queries a page of the orderbook for the auction that is still accepting orders","params":{"maxPageSize":"count of elements to be returned per page (same value is used for subqueries on the exchange)","previousPageUser":"address taken from nextPageUser return value from last page (address(0) for first page)","previousPageUserOffset":"offset taken nextPageUserOffset return value from last page (0 for first page)","tokenFilter":"all returned order will have buy *and* sell token from this list (leave empty for \"no filter\")"},"return":"encoded bytes representing orders and page information for next page"},"getTokenInfo(uint16)":{"details":"Queries the token information for the given tokenId. Can handle symbols of type string and bytes (e.g. MKR). Returns \"Unknown\" as symbol value if it cannot be retrieved and reverts if decimals can not be fetched (to avoid ambiguity with a \"valid\" value).","params":{"tokenId":"the ID of a token listed on BatchExchange"},"return":"the address, symbol and decimals of the token contract"},"getTokenSymbolBytes(address)":{"details":"returns the symbol() of the given address assuming it is returned as a bytes. Reverts if method does not exist or returns data that cannot be casted into a string.","params":{"token":"the token address from which to receive the symbol"},"return":"the token's symbol converted into a trimmed (trailing 0 bytes remove) string."},"getTokenSymbolString(address)":{"details":"returns the symbol() of the given address assuming it is returned as a string. Reverts if method does not exist or returns data that is not a valid string.","params":{"token":"the token address from which to receive the symbol"},"return":"the token's symbol"},"setLength(bytes,uint256)":{"details":"Sets the length of the given buffer (truncating any items exceeding the length). Note, that this can lead to memory leakage or undefined behavior if length is larger than the size that was originally allocated by the buffer."}}},"networks":{"1":{"address":"0x7D071fb584b51D9c38572A04E1848afd835cD457","links":{},"transactionHash":"0xd1be3b9bfc2bab273e3893ebc56c2925c2e41ab70d96694705bd90dbedcfd1c3"},"100":{"address":"0x51138aad07EbABa6a1D1254cf740Df97B96bFB64","links":{},"transactionHash":"0x4afb81a41e4d7633046302eece8b7a38fc6dcd304d3e35db55c150c31fd3eb60"},"4":{"address":"0x0A7a7E35098b5F969E5d45680827AC478e6e8Ce3","links":{},"transactionHash":"0x0e2ea4e0550d0b960aacc10576ac7e07c5285696f08a0b4b8f608f5b3f098a4f"}},"userdoc":{"methods":{}}} \ No newline at end of file diff --git a/contracts/src/bin/vendor.rs b/contracts/src/bin/vendor.rs index 1a2a9abdc..1e9832d0d 100644 --- a/contracts/src/bin/vendor.rs +++ b/contracts/src/bin/vendor.rs @@ -11,7 +11,7 @@ use std::fs; const ARTIFACTS: &[(&str, &[&str])] = &[ ( - "@gnosis.pm/dex-contracts@0.4.1", + "@gnosis.pm/dex-contracts@0.4.3", &["BatchExchange", "BatchExchangeViewer"], ), ("@gnosis.pm/owl-token@3.1.0", &["TokenOWL", "TokenOWLProxy"]),