Skip to content

MarketPlace

FinTechToken edited this page Sep 1, 2018 · 2 revisions

Purpose:

This smart contract creates an ERC20 Token exchange. Users can deposit and withdraw ether or tokens. Once ether/tokens are deposited users can offer to trade them. The book of offers and trade execution is all 100% on blockchain.

Code:

https://github.com/FinTechToken/FTTokenSmartContracts/blob/master/MarketPlace.sol

Events:

    event MessageAccountDeposit( address indexed mToken, address indexed mAccount, uint256 mValue, uint256 mNow );
    event MessageAccountWithdrawal( address indexed mToken, address indexed mAccount, uint256 mValue, uint256 mNow );
    event MessageTransaction( address indexed mToken, address indexed mFromAccount, address indexed mToAccount, uint256 mPrice, uint256 mCount, uint256 mSellerFee, uint256 mNow );
    event MessagePayTransactionFee( address indexed mToken, address indexed mFromAccount, uint256 mCount, uint256 mSellerFee, uint256 mNow);
    event MessageOffer( address indexed mToken, bool indexed mBuy, address indexed mAccount, bool mAddLiquidity, uint256 mPrice, uint256 mCount, uint256 mFee, uint256 mNow );
    event MessageChangeFees( uint8 mTransFee, uint8 mTransmultiple, uint256 mBookFee, uint256 mNow );
    event MessageOwner( address mOwner, uint256 mNow );
    event MessageFreeze( bool mFreeze, uint256 mNow );

Main Functions

deposit( address _token, uint256 _value ) //Payable to deposit Ether - otherwise send token and amount as params - user must approve transfer from ERC20 _token prior to depositing.

withdrawal( address _token, uint256 _value) //_token 0x0 is used to withdraw Ether

makeOffer( address _token, bool _buy, uint256 _amount, uint256 _shares, uint256 _startAmount ) //_buy is true to buy and false to sell. _amount is price per share with 6 extra decimals. For example 1 would be .000001 satoshi. _startAmount is if the offer is intended to go on the book. Enter the spot in the book the algorithm should start searching from. This lowers the gas cost so an offer doesn't need to search the entire book.

cancelOffer( address _token, bool _buy, uint256 _amount ) // Removes an offer that is already on the book.

receiveApproval( address _grantor, uint256 _value, address _from, bytes extra ) //To deposit from ERC20 tokens that have approveAndCall function.

changeOwner( address _newOwner ) // Callable only by the first owner of the contract. This is so the contract transactional fees can go into an ERC20 token instead of the original author.

freeze() //Callable only by the owner. This is in case we screw up. It prevents all transactions except cancel and withdraw.

updateFees( uint8 _newTransactionFee, uint8 _newTransactionFeeMultiple, uint256 _newAddToBookFee ) // Callable only by the owner. We don't know what the price of Ether will do. This lets us adjust fees over time.

Address: 0x91a917d6761B8c634CfE575B8285085834752CF9

ABI: [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function","signature":"0x06fdde03"},{"constant":false,"inputs":[{"name":"_newTransactionFee","type":"uint8"},{"name":"_newTransactionFeeMultiple","type":"uint8"},{"name":"_newAddToBookFee","type":"uint256"}],"name":"updateFees","outputs":[{"name":"success_","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function","signature":"0x123fcde6"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_buy","type":"bool"},{"name":"_amount","type":"uint256"},{"name":"_shares","type":"uint256"},{"name":"_startAmount","type":"uint256"}],"name":"makeOffer","outputs":[{"name":"_success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function","signature":"0x270b3d2b"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_value","type":"uint256"}],"name":"deposit","outputs":[{"name":"success_","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function","signature":"0x47e7ef24"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bool"},{"name":"","type":"uint256"}],"name":"offersAtPrice","outputs":[{"name":"nextPrice","type":"uint256"},{"name":"currentOffersLength","type":"uint24"}],"payable":false,"stateMutability":"view","type":"function","signature":"0x51debeef"},{"constant":true,"inputs":[],"name":"addToBookFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function","signature":"0x5732c2bb"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_value","type":"uint256"}],"name":"withdrawal","outputs":[{"name":"success_","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function","signature":"0x5a6b26ba"},{"constant":false,"inputs":[],"name":"freeze","outputs":[{"name":"success_","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function","signature":"0x62a5af3b"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_buy","type":"bool"},{"name":"_amount","type":"uint256"}],"name":"cancelOffer","outputs":[{"name":"success_","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function","signature":"0x7962d432"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"accountBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function","signature":"0x887bdcfc"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function","signature":"0x8da5cb5b"},{"constant":false,"inputs":[{"name":"_grantor","type":"address"},{"name":"_value","type":"uint256"},{"name":"_from","type":"address"},{"name":"_extraData","type":"bytes"}],"name":"receiveApproval","outputs":[{"name":"success_","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function","signature":"0x8f4ffcb1"},{"constant":true,"inputs":[],"name":"transactionFee","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function","signature":"0x9ed3edf0"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[{"name":"success_","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function","signature":"0xa6f9dae1"},{"constant":true,"inputs":[],"name":"bidDecimal","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function","signature":"0xb04cf4d5"},{"constant":true,"inputs":[],"name":"transactionFeeMultiple","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function","signature":"0xf5fccae2"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor","signature":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"mToken","type":"address"},{"indexed":true,"name":"mAccount","type":"address"},{"indexed":false,"name":"mValue","type":"uint256"},{"indexed":false,"name":"mNow","type":"uint256"}],"name":"MessageAccountDeposit","type":"event","signature":"0x88c55a25c2ff316c8b3eca41653bb7eed1998d61e2f7f7288b79123faba99029"},{"anonymous":false,"inputs":[{"indexed":true,"name":"mToken","type":"address"},{"indexed":true,"name":"mAccount","type":"address"},{"indexed":false,"name":"mValue","type":"uint256"},{"indexed":false,"name":"mNow","type":"uint256"}],"name":"MessageAccountWithdrawal","type":"event","signature":"0x62185ef12fb4703a4f6e507e425ecaf63765a462d2a690b68015efff74d56323"},{"anonymous":false,"inputs":[{"indexed":true,"name":"mToken","type":"address"},{"indexed":true,"name":"mFromAccount","type":"address"},{"indexed":true,"name":"mToAccount","type":"address"},{"indexed":false,"name":"mPrice","type":"uint256"},{"indexed":false,"name":"mCount","type":"uint256"},{"indexed":false,"name":"mSellerFee","type":"uint256"},{"indexed":false,"name":"mNow","type":"uint256"}],"name":"MessageTransaction","type":"event","signature":"0x34c71b74d4282956a51d34ef305cd4be32bce34f5b12dbc08a072855c54a08af"},{"anonymous":false,"inputs":[{"indexed":true,"name":"mToken","type":"address"},{"indexed":true,"name":"mFromAccount","type":"address"},{"indexed":false,"name":"mCount","type":"uint256"},{"indexed":false,"name":"mSellerFee","type":"uint256"},{"indexed":false,"name":"mNow","type":"uint256"}],"name":"MessagePayTransactionFee","type":"event","signature":"0xb5a03edd954b80022e769f7c8af9170e2e39a4b351002a1864e888aac1eb0f53"},{"anonymous":false,"inputs":[{"indexed":true,"name":"mToken","type":"address"},{"indexed":true,"name":"mBuy","type":"bool"},{"indexed":true,"name":"mAccount","type":"address"},{"indexed":false,"name":"mAddLiquidity","type":"bool"},{"indexed":false,"name":"mPrice","type":"uint256"},{"indexed":false,"name":"mCount","type":"uint256"},{"indexed":false,"name":"mFee","type":"uint256"},{"indexed":false,"name":"mNow","type":"uint256"}],"name":"MessageOffer","type":"event","signature":"0x15d58562a65ae36bd23629b8f65e2ad443fa78099ce2a35f40d3eac772245b60"},{"anonymous":false,"inputs":[{"indexed":false,"name":"mTransFee","type":"uint8"},{"indexed":false,"name":"mTransmultiple","type":"uint8"},{"indexed":false,"name":"mBookFee","type":"uint256"},{"indexed":false,"name":"mNow","type":"uint256"}],"name":"MessageChangeFees","type":"event","signature":"0xe422d31ad0a7139b58a00a7ad71cefc619bdf5e99c4698efc980d2414ab0e620"},{"anonymous":false,"inputs":[{"indexed":false,"name":"mOwner","type":"address"},{"indexed":false,"name":"mNow","type":"uint256"}],"name":"MessageOwner","type":"event","signature":"0x399c8ba6436ea2d88f2a7f279f1701397fcd5bd2046ffd92cfa3b4fe16b551cf"},{"anonymous":false,"inputs":[{"indexed":false,"name":"mFreeze","type":"bool"},{"indexed":false,"name":"mNow","type":"uint256"}],"name":"MessageFreeze","type":"event","signature":"0x4acad4a82756afd37e2d2e935cd96aa2d8c97634700f991592f3b977d6dc7d80"}]

Bytecode:

0x60c0604052600b60808190527f4d61726b6574506c61636500000000000000000000000000000000000000000060a090815262000043916302000002919062000149565b506302000005805462ff00001916620600001790553480156200006557600080fd5b5063020000038054600160a060020a0319163317905566038d7ea4c6800063020000048190556302000005805461ff001960ff1990911660031716610100908117918290556040805160ff84811682529290930490911660208301528181019290925242606082015290517fe422d31ad0a7139b58a00a7ad71cefc619bdf5e99c4698efc980d2414ab0e6209181900360800190a163020000035460408051600160a060020a03909216825242602083015280517f399c8ba6436ea2d88f2a7f279f1701397fcd5bd2046ffd92cfa3b4fe16b551cf9281900390910190a1620001ee565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200018c57805160ff1916838001178555620001bc565b82800160010185558215620001bc579182015b82811115620001bc5782518255916020019190600101906200019f565b50620001ca929150620001ce565b5090565b620001eb91905b80821115620001ca5760008155600101620001d5565b90565b6137df80620001fe6000396000f3006080604052600436106100e55763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610135578063123fcde6146101bf578063270b3d2b146101ea57806347e7ef241461021957806351debeef146102305780635732c2bb146102765780635a6b26ba1461029d57806362a5af3b146102c15780637962d432146102d6578063887bdcfc146102ff5780638da5cb5b146103265780638f4ffcb1146103575780639ed3edf0146103c7578063a6f9dae1146103f2578063b04cf4d514610413578063f5fccae214610428575b6040805160e560020a62461bcd02815260206004820152600b60248201527f4e6f2046616c6c6261636b000000000000000000000000000000000000000000604482015290519081900360640190fd5b34801561014157600080fd5b5061014a61043d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561018457818101518382015260200161016c565b50505050905090810190601f1680156101b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d660ff600435811690602435166044356104ce565b604080519115158252519081900360200190f35b3480156101f657600080fd5b506101d6600160a060020a0360043516602435151560443560643560843561065e565b6101d6600160a060020a03600435166024356123a7565b34801561023c57600080fd5b50610259600160a060020a036004351660243515156044356126d2565b6040805192835262ffffff90911660208301528051918290030190f35b34801561028257600080fd5b5061028b612704565b60408051918252519081900360200190f35b3480156102a957600080fd5b506101d6600160a060020a036004351660243561270d565b3480156102cd57600080fd5b506101d6612925565b3480156102e257600080fd5b506101d6600160a060020a03600435166024351515604435612a0b565b34801561030b57600080fd5b5061028b600160a060020a0360043581169060243516612f8f565b34801561033257600080fd5b5061033b612faf565b60408051600160a060020a039092168252519081900360200190f35b34801561036357600080fd5b50604080516020601f6064356004818101359283018490048402850184019095528184526101d694600160a060020a03813581169560248035966044359093169536956084949201918190840183828082843750949750612fc19650505050505050565b3480156103d357600080fd5b506103dc6131f2565b6040805160ff9092168252519081900360200190f35b3480156103fe57600080fd5b506101d6600160a060020a03600435166131fe565b34801561041f57600080fd5b506103dc6132ce565b34801561043457600080fd5b506103dc6132e0565b6302000002805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104c65780601f1061049b576101008083540402835291602001916104c6565b820191906000526020600020905b8154815290600101906020018083116104a957829003601f168201915b505050505081565b63020000035460009081908190600160a060020a0316331461053a576040805160e560020a62461bcd02815260206004820152600e60248201527f41646d696e2046756e6374696f6e000000000000000000000000000000000000604482015290519081900360640190fd5b83915060ff86161580159061055a575063020000055460ff878116911614155b80610582575060ff851615801590610582575063020000055460ff8681166101009092041614155b156105b057506302000005805460ff8681166101000261ff001991891660ff19909316929092171617905560015b81158015906105c457506302000004548214155b156105e4578160001914156105d857600091505b50630200000481905560015b8015610650576302000005546302000004546040805160ff8085168252610100909404909316602084015282810191909152426060830152517fe422d31ad0a7139b58a00a7ad71cefc619bdf5e99c4698efc980d2414ab0e6209181900360800190a160019250610655565b600092505b50509392505050565b6000610668613733565b63020000035460009060a060020a900460ff16156106d0576040805160e560020a62461bcd02815260206004820152600660248201527f467265657a650000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b841515610727576040805160e560020a62461bcd02815260206004820152600b60248201527f4e65656420536861726573000000000000000000000000000000000000000000604482015290519081900360640190fd5b85151561077e576040805160e560020a62461bcd02815260206004820152600b60248201527f4e65656420616d6f756e74000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000198614156107d8576040805160e560020a62461bcd02815260206004820152600e60248201527f4e6f74206d617820616d6f756e74000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0388161515610838576040805160e560020a62461bcd02815260206004820152601060248201527f4e6f74207a65726f206164647265737300000000000000000000000000000000604482015290519081900360640190fd5b858586880281151561084657fe5b041461088b576040805160e560020a62461bcd028152602060048201526009602482015260b860020a684f766572666c6f773102604482015290519081900360640190fd5b63020000055462010000900460ff16600a0a8587028115156108a957fe5b630200000454630200000554929091049162010000900460ff16600a0a8789028115156108d257fe5b0401101561092a576040805160e560020a62461bcd02815260206004820152600960248201527f4f766572666c6f77320000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6302000005548587029062010000900460ff16600a0a808281151561094b57fe5b0402146109a2576040805160e560020a62461bcd02815260206004820152600960248201527f4f766572666c6f77330000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8615610a4b5763020000045463020000055462010000900460ff16600a0a8688028115156109cc57fe5b3360009081526000805160206137548339815191526020526040902054919004919091011115610a46576040805160e560020a62461bcd02815260206004820152601260248201527f4e65656420456e6f75676820416d6f756e740000000000000000000000000000604482015290519081900360640190fd5b610b6d565b600160a060020a0388166000908152630200000060209081526040808320338452909152902054851115610ac9576040805160e560020a62461bcd02815260206004820152601260248201527f4e65656420456e6f756768205368617265730000000000000000000000000000604482015290519081900360640190fd5b630200000454630200000554610af79062010000900460ff16600a0a878902811515610af157fe5b046132f1565b63020000055462010000900460ff16600a0a878902811515610b1557fe5b04031015610b6d576040805160e560020a62461bcd02815260206004820152600960248201527f4f766572666c6f77340000000000000000000000000000000000000000000000604482015290519081900360640190fd5b506101008101849052600160a060020a038716600090815263020000016020908152604080832083805282528083209091528120541515610bd957600160a060020a03881660009081526302000001602090815260408083208380528252808320909152902060001990555b868015610c155750600160a060020a03881660009081526302000001602090815260408083208a15845282528083208380529091529020548610155b80610c58575086158015610c585750600160a060020a03881660009081526302000001602090815260408083208a15845282528083208380529091529020548611155b15611caf57600160a060020a03881660009081526302000001602090815260408083208a158085528184528285208580528085528386205488529085529083528551845282528083206001015462ffffff16908501528301525b604082015160208301511015611c3757600160a060020a03881660009081526302000001602090815260408083208a1584528252808320855184529091529020600201826001602002015162ffffff8110610d0957fe5b6002020160010154826008600981101515610d2057fe5b60200201511015611158576101008201511515610d6257610d598260075b6020020151608084015160a085015160c08601518c8c61331a565b6001925061239c565b610100820151600160a060020a03891660009081526302000001602090815260408083208b1584528252808320865184529091529020600201836001602002015162ffffff8110610daf57fe5b6002908102919091016001908101805493909303909255600160a060020a038a1660009081526302000001602090815260408083208c158452825280832087518452909152902001908390602002015162ffffff8110610e0b57fe5b6002020154825161010084015160408051600080825260208201949094528082019290925260608201929092524260808201529051600160a060020a03928316928a1592908c16916000805160206137748339815191529181900360a00190a48615610ff757630200000554610e9a9062010000900460ff16600a0a87846008602002015102811515610af157fe5b6060830152600160a060020a03881660009081526302000001602090815260408083208a15845282528083208551845282529091209083015133916002019062ffffff8110610ee557fe5b6002020154835161010085015160608087015160408051948552602085019390935283830152429083015251600160a060020a03928316928c1691600080516020613794833981519152919081900360800190a4606082015160e083018051820190526302000005546101008401516201000090910460ff16600a0a908802811515610f6d57fe5b600160a060020a038b1660009081526302000001602090815260408083208d158452825280832088518452909152812092909104929092039160008051602061375483398151915291600201856001602002015162ffffff8110610fcd57fe5b6002020154600160a060020a0316815260208101919091526040016000208054909101905561110e565b600160a060020a03881660009081526302000001602090815260408083208a1584528252808320855184529091529020600201826001602002015162ffffff811061103e57fe5b6002020154825161010084015160408051928352602083019190915260008282015242606083015251600160a060020a03928316923392908c16916000805160206137948339815191529181900360800190a4610100820151600160a060020a0389166000908152630200000060209081526040808320630200000183528184208c1585528352818420875185528352908320918601519092916002019062ffffff81106110e857fe5b6002020154600160a060020a031681526020810191909152604001600020805490910190555b61010082015160c0830180518201905263020000055483516201000090910460ff16600a0a910281151561113e57fe5b048260046020020180519091019052610d59826007610d3e565b600160a060020a03881660009081526302000001602090815260408083208a1584528252808320855184529091528120600201836001602002015162ffffff811061119f57fe5b60020201600101541115611c275786156117bc57630200000554600160a060020a03891660009081526302000001602090815260408083208b15845282528083208651845290915290206112249162010000900460ff16600a0a90600201846001602002015162ffffff811061121157fe5b60020201600101548802811515610af157fe5b6060830181905260e0830180519091019052600160a060020a03881660009081526302000001602090815260408083208a15845282528083208551845282529091209083015133916002019062ffffff811061127c57fe5b6002020154600160a060020a03908116908a1660008051602061379483398151915285600060209081029190910151600160a060020a038e1660009081526302000001835260408082208f15835290935291822090918881602002015181526020019081526020016000206002018760016009811015156112f957fe5b602002015162ffffff811061130a57fe5b600202016001015487600360098110151561132157fe5b6020020151426040518085815260200184815260200183815260200182815260200194505050505060405180910390a46302000004546060830151630200000554600160a060020a038b1660009081526302000001602090815260408083208d15845282528083208851845290915290206201000090910460ff16600a0a90600201856001602002015162ffffff81106113b757fe5b600202016001015489028115156113ca57fe5b0403106115c6576302000004546060830151630200000554600160a060020a038b1660009081526302000001602090815260408083208d15845282528083208851845290915290206201000090910460ff16600a0a90600201856001602002015162ffffff811061143757fe5b6002020160010154890281151561144a57fe5b600160a060020a038c1660009081526302000001602090815260408083208e1584528252808320895184529091528120929091049290920392909203916000805160206137548339815191529190600201856001602002015162ffffff81106114af57fe5b60029081029190910154600160a060020a039081168352602080840194909452604092830160009081208054969096019095558c168452630200000183528184208b158552835281842086518552835292209084015191019062ffffff811061151457fe5b600290810291909101548351600160a060020a038b811660008181526302000001602090815260408083208f158085529083528184208b518552909252822093909516959193600080516020613774833981519152939192909101886001602002015162ffffff811061158357fe5b600202016001015463020000045460408051941515855260208501939093528383019190915260608301524260808301525160a0918190039190910190a46117b7565b6060820151630200000554600160a060020a038a1660009081526302000001602090815260408083208c15845282528083208751845290915290206201000090910460ff16600a0a90600201846001602002015162ffffff811061162657fe5b6002020160010154880281151561163957fe5b600160a060020a038b1660009081526302000001602090815260408083208d158452825280832088518452909152812092909104929092039160008051602061375483398151915291600201856001602002015162ffffff811061169957fe5b60029081029190910154600160a060020a0390811683526020808401949094526040928301600090812080549690960190955563020000045460a0880180519190910390528c168452630200000183528184208b158552835281842086518552835292209084015191019062ffffff811061171057fe5b600290810291909101548351600160a060020a038b811660008181526302000001602090815260408083208f158085529083528184208b518552909252822093909516959193600080516020613774833981519152939192909101886001602002015162ffffff811061177f57fe5b6002020160010154604080519315158452602084019290925282820152600060608301524260808301525160a0918190039190910190a45b611a5c565b600160a060020a03881660009081526302000001602090815260408083208a1584528252808320855184529091529020600201826001602002015162ffffff811061180357fe5b600290810291909101548351600160a060020a038b811660008181526302000001602090815260408083208f15845282528083208a5184529091529020919093169333939260008051602061379483398151915292909101876001602002015162ffffff811061186f57fe5b60020201600101546000426040518085815260200184815260200183815260200182815260200194505050505060405180910390a4600160a060020a03881660009081526302000001602090815260408083208a1584528252808320855184529091529020600201826001602002015162ffffff81106118eb57fe5b60029081029190910160010154600160a060020a038a166000908152630200000060209081526040808320630200000183528184208d1585528352818420885185528352908320918701519394909391019062ffffff811061194957fe5b60029081029190910154600160a060020a039081168352602080840194909452604092830160009081208054969096019095558c168452630200000183528184208b158552835281842086518552835292209084015191019062ffffff81106119ae57fe5b600290810291909101548351600160a060020a038b811660008181526302000001602090815260408083208f158085529083528184208b518552909252822093909516959193600080516020613774833981519152939192909101886001602002015162ffffff8110611a1d57fe5b600202016001015463020000045460408051941515855260208501939093528383019190915260608301524260808301525160a0918190039190910190a45b630200000554600160a060020a03891660009081526302000001602090815260408083208b15845282528083208651845290915290206201000090910460ff16600a0a90600201836001602002015162ffffff8110611ab757fe5b6002020160010154836000600981101515611ace57fe5b602002015102811515611add57fe5b60808401805192909104909101905263020000045460a0830180519091019052600160a060020a03881660009081526302000001602090815260408083208a1584528252808320855184529091529020600201826001602002015162ffffff8110611b4457fe5b6002020160010154826006600981101515611b5b57fe5b602090810291909101805192909201909152600160a060020a03891660009081526302000001825260408082208a15835283528082208551835290925220600201826001602002015162ffffff8110611bb057fe5b6002020160010154826008600981101515611bc757fe5b602090810291909101805192909203909152600160a060020a03891660009081526302000001825260408082208a158352835280822085518352835281209184015190916002019062ffffff8110611c1b57fe5b60020201600101819055505b6020820180516001019052610cb2565b600160a060020a03881660009081526302000001602090815260408083208a158085528184528285208751865280855283862054868052848720559085529083528551845290915290206001908101805462ffffff191690911790556101008201511515611caa57610d59826007610d3e565b610bd9565b6080820151151580611cc4575060c082015115155b15611cd457611cd4826007610d3e565b600160a060020a03881660009081526302000001602090815260408083208a151584528252808320898452909152902060019081015462ffffff1611611d8657611d2088888887613491565b600160a060020a03881660009081526302000001602090815260408083208a151584528252808320898452909152902060018101805462ffffff1916600a1790556101008301516003820155600201805433600160a060020a03199091161790556121b9565b600060208301525b600160a060020a03881660009081526302000001602090815260408083208a1515845282528083208984528252909120600101549083015162ffffff909116111561209357600160a060020a03881660009081526302000001602090815260408083208a1515845282528083208984529091529020600201826001602002015162ffffff8110611e1a57fe5b600202016001015460001415611f3157610100820151600160a060020a03891660009081526302000001602090815260408083208b1515845282528083208a845282529091209084015160029091019062ffffff8110611e7657fe5b6001600291820292909201820192909255600160a060020a038a1660009081526302000001602090815260408083208c1515845282528083208b84529091529020339201908490602002015162ffffff8110611ece57fe5b600202018054600160a060020a031916600160a060020a03928316179055881660009081526302000001602090815260408083208a151584528252808320898452909152902060019081015462ffffff9081168201169083906020020152612083565b600160a060020a03881660009081526302000001602090815260408083208a15158452825280832089845282529091209083015133916002019062ffffff8110611f7757fe5b6002020154600160a060020a0316141561208357610100820151600160a060020a03891660009081526302000001602090815260408083208b1515845282528083208a845282529091209084015160029091019062ffffff8110611fd757fe5b6001600291820292909201820154600160a060020a038c1660009081526302000001602090815260408083208e1515845282528083208d8452909152902093019201908490602002015162ffffff811061202d57fe5b60020201600190810191909155600160a060020a03891660009081526302000001602090815260408083208b1515845282528083208a8452909152902081015462ffffff90811682011690839060200201525060015b6020820180516001019052611d8e565b600160a060020a03881660009081526302000001602090815260408083208a1515845282528083208984528252909120600101549083015162ffffff90911614156121b957600160a060020a03881660009081526302000001602090815260408083208a151584528252808320898452825290912060018101805462ffffff19811662ffffff918216600a018216179091556101008501519285015160029092019190811061213e57fe5b6001600291820292909201820192909255600160a060020a038a1660009081526302000001602090815260408083208c1515845282528083208b84529091529020339201908490602002015162ffffff811061219657fe5b600202018054600160a060020a031916600160a060020a03929092169190911790555b861561231e5780156122645763020000055462010000900460ff16600a0a826008602002015187028115156121ea57fe5b336000818152600080516020613754833981519152602090815260408083208054969095049095039093556101008601518451600181529384018b9052838501526060830152426080830152915189151591600160a060020a038c16916000805160206137748339815191529181900360a00190a4612319565b63020000045463020000055462010000900460ff16600a0a8360086020020151880281151561228f57fe5b33600081815260008051602061375483398151915260205260409020805493909204939093019091039055871515600160a060020a038a1660008051602061377483398151915260018a8760086020908102919091015163020000045460408051951515865292850193909352838201526060830191909152426080830152519081900360a00190a45b612397565b61010082018051600160a060020a038a1660008181526302000000602090815260408083203380855290835281842080549690960390955594518551600181529182018c9052818601526060810191909152426080820152925191928a1515926000805160206137748339815191529181900360a00190a45b600192505b505095945050505050565b630200000354600090819060a060020a900460ff1615612411576040805160e560020a62461bcd02815260206004820152600660248201527f667265657a650000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038416158015906124295750600083115b156125e657600160a060020a0384166000908152630200000060209081526040808320338452909152902054838101101561249d576040805160e560020a62461bcd028152602060048201526009602482015260b860020a684f766572666c6f773102604482015290519081900360640190fd5b506040805160006020918201819052825160e060020a6323b872dd0281523360048201523060248201526044810186905292518693600160a060020a038516936323b872dd9360648084019492938390030190829087803b15801561250157600080fd5b5060325a03f115801561251357600080fd5b505060405151159150612596905057600160a060020a038416600081815263020000006020908152604080832033808552908352928190208054880190558051878152429281019290925280519293927f88c55a25c2ff316c8b3eca41653bb7eed1998d61e2f7f7288b79123faba990299281900390910190a3600191506125e6565b6040805160e560020a62461bcd02815260206004820152600960248201527f556e646f537461636b0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60003411156126cb5733600090815260008051602061375483398151915260205260409020543481011015612665576040805160e560020a62461bcd02815260206004820152600960248201527f4f766572666c6f77320000000000000000000000000000000000000000000000604482015290519081900360640190fd5b336000818152600080516020613754833981519152602090815260408083208054349081019091558151908152429281019290925280517f88c55a25c2ff316c8b3eca41653bb7eed1998d61e2f7f7288b79123faba990299281900390910190a3600191505b5092915050565b63020000016020908152600093845260408085208252928452828420905282529020805460019091015462ffffff1682565b63020000045481565b600160a060020a0382166000908152630200000060209081526040808320338452909152812054819083111561278d576040805160e560020a62461bcd02815260206004820152601460248201527f546f6f206d75636820746f207769746864726177000000000000000000000000604482015290519081900360640190fd5b600160a060020a038416600081815263020000006020908152604080832033845290915290208054859003905515156127ee57604051339084156108fc029085906000818181858888f193505050501580156127e857600080fd5b506128d4565b50604080516000602091820181905282517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810186905292518693600160a060020a0385169363a9059cbb9360448084019492938390030190829087803b15801561286257600080fd5b5060325a03f115801561287457600080fd5b505060405151151591506128d49050576040805160e560020a62461bcd02815260206004820152600a60248201527f556e646f737461636b3200000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040805184815242602082015281513392600160a060020a038816927f62185ef12fb4703a4f6e507e425ecaf63765a462d2a690b68015efff74d56323929081900390910190a35060019392505050565b630200000354600090600160a060020a0316331461298d576040805160e560020a62461bcd02815260206004820152600e60248201527f41646d696e2066756e6374696f6e000000000000000000000000000000000000604482015290519081900360640190fd5b6302000003805460ff60a060020a808304821615810274ff00000000000000000000000000000000000000001990931692909217928390556040805192909304161515815242602082015281517f4acad4a82756afd37e2d2e935cd96aa2d8c97634700f991592f3b977d6dc7d80929181900390910190a150600190565b6000808080600160a060020a0387161515612a70576040805160e560020a62461bcd02815260206004820152600e60248201527f4e6f74207a65726f20746f6b656e000000000000000000000000000000000000604482015290519081900360640190fd5b841515612ac7576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f74207a65726f20616d6f756e740000000000000000000000000000000000604482015290519081900360640190fd5b600019851415612b21576040805160e560020a62461bcd02815260206004820152600e60248201527f4e6f74206d617820616d6f756e74000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038716600090815263020000016020908152604080832089151584528252808320888452909152902060019081015462ffffff1611612bb1576040805160e560020a62461bcd02815260206004820152601260248201527f4e6f206f6666657220746f2063616e63656c0000000000000000000000000000604482015290519081900360640190fd5b50505050600160a060020a038316600090815263020000016020908152604080832085151584528252808320848452909152812060019081015462ffffff16825b81811015612f3c57600160a060020a03871660009081526302000001602090815260408083208915158452825280832088845290915281206002018262ffffff8110612c3a57fe5b60020201600101541115612f3457600160a060020a03871660009081526302000001602090815260408083208915158452825280832088845290915290206002018162ffffff8110612c8857fe5b6002020154600160a060020a0316331415612f2f578515612dd357630200000454630200000554600160a060020a03891660009081526302000001602090815260408083208b1515845282528083208a845290915290206201000090910460ff16600a0a906002018362ffffff8110612cfd57fe5b60020201600101548702811515612d1057fe5b3360008181526000805160206137548339815191526020908152604080832080549690950496909601909401909255600160a060020a038b16808352630200000184528483208b15158085529085528584208b8552909452938220909391600080516020613774833981519152918a906002018762ffffff8110612d9057fe5b600202016001015463020000045460408051941515855260208501939093528383019190915260608301524260808301525160a0918190039190910190a4612ece565b600160a060020a03871660009081526302000001602090815260408083208915158452825280832088845290915290206002018162ffffff8110612e1357fe5b60029081029190910160010154600160a060020a0389166000818152630200000060209081526040808320338085529083528184208054909601909555838352630200000182528083208c15158085529083528184208c855290925282209394909360008051602061377483398151915292918b91018762ffffff8110612e9657fe5b6002020160010154604080519315158452602084019290925282820152600060608301524260808301525160a0918190039190910190a45b600160a060020a03871660009081526302000001602090815260408083208915158452825280832088845290915290206002018162ffffff8110612f0e57fe5b600202018054600160a060020a031916815560006001918201559350612f34565b600092505b600101612bf2565b8215612f8557600160a060020a03871660009081526302000001602090815260408083208915158452825280832088845290915290206001908101805462ffffff191690911790555b5050509392505050565b630200000060209081526000928352604080842090915290825290205481565b630200000354600160a060020a031681565b630200000354600090819060a060020a900460ff161561302b576040805160e560020a62461bcd02815260206004820152600660248201527f46726f7a656e0000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a038481166000908152630200000060209081526040808320938a1683529290522054858101101561309c576040805160e560020a62461bcd028152602060048201526009602482015260b860020a684f766572666c6f773102604482015290519081900360640190fd5b506040805160006020918201819052825160e060020a6323b872dd028152600160a060020a03898116600483015230602483015260448201899052935187948516936323b872dd936064808501949293928390030190829087803b15801561310357600080fd5b5060325a03f115801561311557600080fd5b505060405151159150613199905057600160a060020a038085166000818152630200000060209081526040808320948b168084529482529182902080548a0190558151898152429181019190915281517f88c55a25c2ff316c8b3eca41653bb7eed1998d61e2f7f7288b79123faba99029929181900390910190a3600191506131e9565b6040805160e560020a62461bcd02815260206004820152601e60248201527f4d502052656365697665417070726f76616c204469646e277420776f726b0000604482015290519081900360640190fd5b50949350505050565b63020000055460ff1681565b630200000354600090600160a060020a03163314613266576040805160e560020a62461bcd02815260206004820152600e60248201527f41646d696e2066756e6374696f6e000000000000000000000000000000000000604482015290519081900360640190fd5b63020000038054600160a060020a031916600160a060020a0384811691909117918290556040805192909116825242602083015280517f399c8ba6436ea2d88f2a7f279f1701397fcd5bd2046ffd92cfa3b4fe16b551cf9281900390910190a1506001919050565b63020000055462010000900460ff1681565b630200000554610100900460ff1681565b63020000055460009060ff610100820481169116600a0a8381151561331257fe5b040292915050565b8581156133a8578585116133525733600090815260008051602061375483398151915260205260409020805486880390039055613377565b3360009081526000805160206137548339815191526020526040902080548787030190555b600160a060020a0383166000908152630200000060209081526040808320338452909152902080548501905561344e565b6133b1866132f1565b604080518681529190920160208201819052428284015291513391600160a060020a038616917fb5a03edd954b80022e769f7c8af9170e2e39a4b351002a1864e888aac1eb0f539181900360600190a3600160a060020a0383166000908152630200000060209081526040808320338452825280832080548890039055600080516020613754833981519152909152902080548688018390030190555b600081111561348857630200000354600160a060020a03166000908152600080516020613754833981519152602052604090208054820190555b50505050505050565b806000808211156135555784156134fe578382116134f9576040805160e560020a62461bcd02815260206004820152600d60248201527f416d6f756e742077726f6e673100000000000000000000000000000000000000604482015290519081900360640190fd5b613555565b838210613555576040805160e560020a62461bcd02815260206004820152600d60248201527f416d6f756e742077726f6e673200000000000000000000000000000000000000604482015290519081900360640190fd5b50600160a060020a03851660009081526302000001602090815260408083208715158452825280832083805290915281205415806135c45750600160a060020a0386166000908152630200000160209081526040808320881515845282528083208380529091529020546101ff145b1561363e57600160a060020a038616600090815263020000016020908152604080832088151580855290835281842084805290925290912085905561363957600160a060020a038616600090815263020000016020908152604080832088151584528252808320878452909152902060001990555b61372b565b600160a060020a038616600090815263020000016020908152604080832088151584528252808320858452909152902054151561367a57600091505b50600160a060020a038516600090815263020000016020908152604080832087151584528252808320848452909152902080548414156136b95761372b565b8480156136c65750805484115b806136da5750841580156136da5750805484105b15613722578054600160a060020a038716600090815263020000016020908152604080832089151584528252808320888452909152808220929092558381522084905561372b565b8054915061367a565b505050505050565b6101206040519081016040528060099060208202803883395091929150505600a7422df0c6b6bb3d8ce286d1c69f5e05b3322a687ba33011e2fa845511910b3115d58562a65ae36bd23629b8f65e2ad443fa78099ce2a35f40d3eac772245b6034c71b74d4282956a51d34ef305cd4be32bce34f5b12dbc08a072855c54a08afa165627a7a72305820a2c67ae913580e2bfc1c6549f449f63045e1fcdab731dec5e421bb2e895807480029
Clone this wiki locally