diff --git a/python/CHANGELOG b/python/CHANGELOG index 4178fff..14fd5c6 100644 --- a/python/CHANGELOG +++ b/python/CHANGELOG @@ -1,4 +1,6 @@ -* 0.3.2 +* 0.4.1 + - Implement chainlib 0.3.x for giftable token +* 0.4.0 - Implement chainlib 0.3.0 * 0.3.1 - Upgrade chainlib to 0.2.0 diff --git a/python/README.test b/python/README.test new file mode 100644 index 0000000..b8c8896 --- /dev/null +++ b/python/README.test @@ -0,0 +1,3 @@ +On arch, Python.h is in non-standard location, which may cause pip install -r test_requirements to fail. + +If so, set env CFLAGS=`pkg-config --cflags python3` diff --git a/python/eth_erc20/runnable/transfer.py b/python/eth_erc20/runnable/transfer.py index 8cff3cb..b4afdd4 100644 --- a/python/eth_erc20/runnable/transfer.py +++ b/python/eth_erc20/runnable/transfer.py @@ -21,10 +21,7 @@ from hexathon import ( add_0x, strip_0x, ) -from chainlib.eth.connection import EthHTTPConnection -from chainlib.chain import ChainSpec from chainlib.eth.runnable.util import decode_for_puny_humans -from chainlib.eth.address import to_checksum_address import chainlib.eth.cli from chainlib.eth.cli.log import process_log from chainlib.eth.settings import process_settings diff --git a/python/giftable_erc20_token/runnable/deploy.py b/python/giftable_erc20_token/runnable/deploy.py index c071fbb..d59949c 100644 --- a/python/giftable_erc20_token/runnable/deploy.py +++ b/python/giftable_erc20_token/runnable/deploy.py @@ -1,3 +1,5 @@ +#!python3 + """Deploys giftable token .. moduleauthor:: Louis Holbrook @@ -18,56 +20,76 @@ from enum import Enum # external imports import chainlib.eth.cli -from chainlib.chain import ChainSpec -from chainlib.eth.connection import EthHTTPConnection from chainlib.eth.tx import receipt +from chainlib.settings import ChainSettings +from chainlib.eth.cli.log import process_log +from chainlib.eth.settings import process_settings +from chainlib.eth.cli.arg import ( + Arg, + ArgFlag, + process_args, + ) +from chainlib.eth.cli.config import ( + Config, + process_config, + ) + # local imports from giftable_erc20_token import GiftableToken -logging.basicConfig(level=logging.WARNING) logg = logging.getLogger() -arg_flags = chainlib.eth.cli.argflag_std_write -argparser = chainlib.eth.cli.ArgumentParser(arg_flags) + +def process_config_local(config, arg, args, flags): + config.add(args.token_name, '_TOKEN_NAME', False) + config.add(args.token_symbol, '_TOKEN_SYMBOL', False) + config.add(args.token_decimals, '_TOKEN_DECIMALS', False) + return config + + +arg_flags = ArgFlag() +arg = Arg(arg_flags) +flags = arg_flags.STD_WRITE | arg_flags.WALLET + +argparser = chainlib.eth.cli.ArgumentParser() +argparser = process_args(argparser, arg, flags) argparser.add_argument('--name', dest='token_name', required=True, type=str, help='Token name') argparser.add_argument('--symbol', dest='token_symbol', required=True, type=str, help='Token symbol') argparser.add_argument('--decimals', dest='token_decimals', default=18, type=int, help='Token decimals') args = argparser.parse_args() -extra_args = { - 'token_name': None, - 'token_symbol': None, - 'token_decimals': None, - } -config = chainlib.eth.cli.Config.from_args(args, arg_flags, extra_args=extra_args, default_fee_limit=GiftableToken.gas()) +logg = process_log(args, logg) -wallet = chainlib.eth.cli.Wallet() -wallet.from_config(config) +config = Config() +config = process_config(config, arg, args, flags) +config = process_config_local(config, arg, args, flags) +logg.debug('config loaded:\n{}'.format(config)) -rpc = chainlib.eth.cli.Rpc(wallet=wallet) -conn = rpc.connect_by_config(config) - -chain_spec = ChainSpec.from_chain_str(config.get('CHAIN_SPEC')) +settings = ChainSettings() +settings = process_settings(settings, config) +logg.debug('settings loaded:\n{}'.format(settings)) def main(): - signer = rpc.get_signer() - signer_address = rpc.get_sender_address() + signer_address = settings.get('SENDER_ADDRESS') - token_name = config.get('_TOKEN_NAME') - token_symbol = config.get('_TOKEN_SYMBOL') - token_decimals = config.get('_TOKEN_DECIMALS') + c = GiftableToken( + settings.get('CHAIN_SPEC'), + signer=settings.get('SIGNER'), + gas_oracle=settings.get('GAS_ORACLE'), + nonce_oracle=settings.get('NONCE_ORACLE'), + ) - gas_oracle = rpc.get_gas_oracle() - nonce_oracle = rpc.get_nonce_oracle() - - c = GiftableToken(chain_spec, signer=signer, gas_oracle=gas_oracle, nonce_oracle=nonce_oracle) - - (tx_hash_hex, o) = c.constructor(signer_address, token_name, token_symbol, token_decimals) - if config.get('_RPC_SEND'): + (tx_hash_hex, o) = c.constructor( + signer_address, + config.get('_TOKEN_NAME'), + config.get('_TOKEN_SYMBOL'), + config.get('_TOKEN_DECIMALS'), + ) + if settings.get('RPC_SEND'): conn.do(o) - if config.get('_WAIT'): + if settings.get('WAIT'): r = conn.wait(tx_hash_hex) if r['status'] == 0: sys.stderr.write('EVM revert while deploying contract. Wish I had more to tell you') diff --git a/python/giftable_erc20_token/runnable/minter.py b/python/giftable_erc20_token/runnable/minter.py index f450271..9ab6e44 100644 --- a/python/giftable_erc20_token/runnable/minter.py +++ b/python/giftable_erc20_token/runnable/minter.py @@ -17,10 +17,21 @@ import time # external imports import chainlib.eth.cli -from chainlib.eth.connection import EthHTTPConnection -from chainlib.chain import ChainSpec from chainlib.eth.tx import receipt +from chainlib.settings import ChainSettings +from chainlib.eth.cli.log import process_log +from chainlib.eth.settings import process_settings from chainlib.eth.address import to_checksum_address +from chainlib.eth.cli.arg import ( + Arg, + ArgFlag, + process_args, + ) +from chainlib.eth.cli.config import ( + Config, + process_config, + ) + from hexathon import ( strip_0x, add_0x, @@ -29,37 +40,41 @@ from hexathon import ( # local imports from giftable_erc20_token import GiftableToken -logging.basicConfig(level=logging.WARNING) logg = logging.getLogger() -arg_flags = chainlib.eth.cli.argflag_std_write | chainlib.eth.cli.Flag.EXEC | chainlib.eth.cli.Flag.WALLET -argparser = chainlib.eth.cli.ArgumentParser(arg_flags) + +def process_config_local(config, arg, args, flags): + config.add(args.rm, '_RM', False) + config.add(add_0x(args.minter_address[0]), '_MINTER_ADDRESS', False) + return config + + +arg_flags = ArgFlag() +arg = Arg(arg_flags) +flags = arg_flags.STD_WRITE | arg_flags.EXEC | arg_flags.WALLET + +argparser = chainlib.eth.cli.ArgumentParser() +argparser = process_args(argparser, arg, flags) argparser.add_argument('--rm', action='store_true', help='Remove entry') -argparser.add_positional('minter_address', type=str, help='Address to add or remove as minter') +argparser.add_argument('minter_address', type=str, help='Address to add or remove as minter') args = argparser.parse_args() -extra_args = { - 'rm': None, - 'minter_address': None, - } -config = chainlib.eth.cli.Config.from_args(args, arg_flags, extra_args=extra_args, default_fee_limit=GiftableToken.gas()) -wallet = chainlib.eth.cli.Wallet() -wallet.from_config(config) +logg = process_log(args, logg) -rpc = chainlib.eth.cli.Rpc(wallet=wallet) -conn = rpc.connect_by_config(config) +config = Config() +config = process_config(config, arg, args, flags) +config = process_config_local(config, arg, args, flags) +logg.debug('config loaded:\n{}'.format(config)) -chain_spec = ChainSpec.from_chain_str(config.get('CHAIN_SPEC')) +settings = ChainSettings() +settings = process_settings(settings, config) +logg.debug('settings loaded:\n{}'.format(settings)) def main(): - signer = rpc.get_signer() - signer_address = rpc.get_sender_address() + signer_address = settings.get('SENDER_ADDRESS') - gas_oracle = rpc.get_gas_oracle() - nonce_oracle = rpc.get_nonce_oracle() - - recipient_address_input = config.get('_RECIPIENT') + recipient_address_input = settings.get('RECIPIENT') if recipient_address_input == None: recipient_address_input = signer_address @@ -67,20 +82,30 @@ def main(): if not config.true('_UNSAFE') and recipient_address != add_0x(recipient_address_input): raise ValueError('invalid checksum address for recipient') - token_address = add_0x(to_checksum_address(config.get('_EXEC_ADDRESS'))) - if not config.true('_UNSAFE') and token_address != add_0x(config.get('_EXEC_ADDRESS')): - raise ValueError('invalid checksum address for contract') - minter_address = config.get('_MINTER_ADDRESS') - c = GiftableToken(chain_spec, signer=signer, gas_oracle=gas_oracle, nonce_oracle=nonce_oracle) - if config.get('_RM'): - (tx_hash_hex, o) = c.remove_minter(token_address, signer_address, minter_address) - else: - (tx_hash_hex, o) = c.add_minter(token_address, signer_address, minter_address) + c = GiftableToken( + settings.get('CHAIN_SPEC'), + signer=settings.get('SIGNER'), + gas_oracle=settings.get('GAS_ORACLE'), + nonce_oracle=settings.get('NONCE_ORACLE'), + ) - if config.get('_RPC_SEND'): + if config.get('_RM'): + (tx_hash_hex, o) = c.remove_minter( + settings.get('EXEC'), + signer_address, + minter_address, + ) + else: + (tx_hash_hex, o) = c.add_minter( + settings.get('EXEC'), + signer_address, + minter_address, + ) + + if settings.get('RPC_SEND'): conn.do(o) - if config.get('_WAIT'): + if settings.get('WAIT'): r = conn.wait(tx_hash_hex) if r['status'] == 0: sys.stderr.write('EVM revert. Wish I had more to tell you') diff --git a/solidity/GiftableToken.bin b/solidity/GiftableToken.bin index 37d8f60..ed78584 100644 --- a/solidity/GiftableToken.bin +++ b/solidity/GiftableToken.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b506040516200199f3803806200199f8339818101604052810190620000379190620003af565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600290805190602001906200008f92919062000124565b508160039080519060200190620000a892919062000124565b5080600460006101000a81548160ff021916908360ff16021790555060018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050620004ad565b828054620001329062000478565b90600052602060002090601f016020900481019282620001565760008555620001a2565b82601f106200017157805160ff1916838001178555620001a2565b82800160010185558215620001a2579182015b82811115620001a157825182559160200191906001019062000184565b5b509050620001b19190620001b5565b5090565b5b80821115620001d0576000816000905550600101620001b6565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200023d82620001f2565b810181811067ffffffffffffffff821117156200025f576200025e62000203565b5b80604052505050565b600062000274620001d4565b905062000282828262000232565b919050565b600067ffffffffffffffff821115620002a557620002a462000203565b5b620002b082620001f2565b9050602081019050919050565b60005b83811015620002dd578082015181840152602081019050620002c0565b83811115620002ed576000848401525b50505050565b60006200030a620003048462000287565b62000268565b905082815260208101848484011115620003295762000328620001ed565b5b62000336848285620002bd565b509392505050565b600082601f830112620003565762000355620001e8565b5b815162000368848260208601620002f3565b91505092915050565b600060ff82169050919050565b620003898162000371565b81146200039557600080fd5b50565b600081519050620003a9816200037e565b92915050565b600080600060608486031215620003cb57620003ca620001de565b5b600084015167ffffffffffffffff811115620003ec57620003eb620001e3565b5b620003fa868287016200033e565b935050602084015167ffffffffffffffff8111156200041e576200041d620001e3565b5b6200042c868287016200033e565b92505060406200043f8682870162000398565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200049157607f821691505b602082108103620004a757620004a662000449565b5b50919050565b6114e280620004bd6000396000f3fe608060405234801561001057600080fd5b5060043610610112576000357c010000000000000000000000000000000000000000000000000000000090048063449a52f8116100b4578063983b2d5611610083578063983b2d56146102cd578063a9059cbb146102fd578063dd62ed3e1461032d578063f2fde38b1461035d57610112565b8063449a52f81461023157806370a08231146102615780638da5cb5b1461029157806395d89b41146102af57610112565b806318160ddd116100f057806318160ddd1461019557806323b872dd146101b35780633092afd5146101e3578063313ce5671461021357610112565b806301ffc9a71461011757806306fdde0314610147578063095ea7b314610165575b600080fd5b610131600480360381019061012c9190611056565b61038d565b60405161013e919061109e565b60405180910390f35b61014f6104e1565b60405161015c9190611152565b60405180910390f35b61017f600480360381019061017a9190611208565b61056f565b60405161018c919061109e565b60405180910390f35b61019d6106f3565b6040516101aa9190611257565b60405180910390f35b6101cd60048036038101906101c89190611272565b6106f9565b6040516101da919061109e565b60405180910390f35b6101fd60048036038101906101f891906112c5565b610a0b565b60405161020a919061109e565b60405180910390f35b61021b610afd565b604051610228919061130e565b60405180910390f35b61024b60048036038101906102469190611208565b610b10565b604051610258919061109e565b60405180910390f35b61027b600480360381019061027691906112c5565b610c46565b6040516102889190611257565b60405180910390f35b610299610c5e565b6040516102a69190611338565b60405180910390f35b6102b7610c82565b6040516102c49190611152565b60405180910390f35b6102e760048036038101906102e291906112c5565b610d10565b6040516102f4919061109e565b60405180910390f35b61031760048036038101906103129190611208565b610dcb565b604051610324919061109e565b60405180910390f35b61034760048036038101906103429190611353565b610f34565b6040516103549190611257565b60405180910390f35b610377600480360381019061037291906112c5565b610f59565b604051610384919061109e565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036103e157600190506104dc565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361043357600190506104dc565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361048557600190506104dc565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036104d757600190506104dc565b600090505b919050565b600280546104ee906113c2565b80601f016020809104026020016040519081016040528092919081815260200182805461051a906113c2565b80156105675780601f1061053c57610100808354040283529160200191610567565b820191906000526020600020905b81548152906001019060200180831161054a57829003601f168201915b505050505081565b600080821115610603576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461060257600080fd5b5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516106e19190611257565b60405180910390a36001905092915050565b60055481565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561078457600080fd5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156107d057600080fd5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108589190611422565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109279190611422565b9250508190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461097d9190611456565b925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f939856040516109f89190611257565b60405180910390a4600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a9357508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a9c57600080fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600460009054906101000a900460ff1681565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b6857600080fd5b81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb79190611456565b925050819055508160056000828254610bd09190611456565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f884604051610c349190611257565b60405180910390a36001905092915050565b60066020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054610c8f906113c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbb906113c2565b8015610d085780601f10610cdd57610100808354040283529160200191610d08565b820191906000526020600020905b815481529060010190602001808311610ceb57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6b57600080fd5b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e1957600080fd5b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e689190611422565b9250508190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ebe9190611456565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f229190611257565b60405180910390a36001905092915050565b6007602052816000526040600020602052806000526040600020600091509150505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb457600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61103381610ffe565b811461103e57600080fd5b50565b6000813590506110508161102a565b92915050565b60006020828403121561106c5761106b610ff9565b5b600061107a84828501611041565b91505092915050565b60008115159050919050565b61109881611083565b82525050565b60006020820190506110b3600083018461108f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156110f35780820151818401526020810190506110d8565b83811115611102576000848401525b50505050565b6000601f19601f8301169050919050565b6000611124826110b9565b61112e81856110c4565b935061113e8185602086016110d5565b61114781611108565b840191505092915050565b6000602082019050818103600083015261116c8184611119565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061119f82611174565b9050919050565b6111af81611194565b81146111ba57600080fd5b50565b6000813590506111cc816111a6565b92915050565b6000819050919050565b6111e5816111d2565b81146111f057600080fd5b50565b600081359050611202816111dc565b92915050565b6000806040838503121561121f5761121e610ff9565b5b600061122d858286016111bd565b925050602061123e858286016111f3565b9150509250929050565b611251816111d2565b82525050565b600060208201905061126c6000830184611248565b92915050565b60008060006060848603121561128b5761128a610ff9565b5b6000611299868287016111bd565b93505060206112aa868287016111bd565b92505060406112bb868287016111f3565b9150509250925092565b6000602082840312156112db576112da610ff9565b5b60006112e9848285016111bd565b91505092915050565b600060ff82169050919050565b611308816112f2565b82525050565b600060208201905061132360008301846112ff565b92915050565b61133281611194565b82525050565b600060208201905061134d6000830184611329565b92915050565b6000806040838503121561136a57611369610ff9565b5b6000611378858286016111bd565b9250506020611389858286016111bd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806113da57607f821691505b6020821081036113ed576113ec611393565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061142d826111d2565b9150611438836111d2565b92508282101561144b5761144a6113f3565b5b828203905092915050565b6000611461826111d2565b915061146c836111d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156114a1576114a06113f3565b5b82820190509291505056fea26469706673582212205fc8b9ae105c30de7717077cd1d886d62671d0141cc27c3db4575e24bd82c4d264736f6c634300080d0033 \ No newline at end of file +60806040523480156200001157600080fd5b5060405162001b8038038062001b808339818101604052810190620000379190620002e7565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260029081620000889190620005d2565b5081600390816200009a9190620005d2565b5080600460006101000a81548160ff021916908360ff16021790555060018060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050620006b9565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200017f8262000134565b810181811067ffffffffffffffff82111715620001a157620001a062000145565b5b80604052505050565b6000620001b662000116565b9050620001c4828262000174565b919050565b600067ffffffffffffffff821115620001e757620001e662000145565b5b620001f28262000134565b9050602081019050919050565b60005b838110156200021f57808201518184015260208101905062000202565b60008484015250505050565b6000620002426200023c84620001c9565b620001aa565b9050828152602081018484840111156200026157620002606200012f565b5b6200026e848285620001ff565b509392505050565b600082601f8301126200028e576200028d6200012a565b5b8151620002a08482602086016200022b565b91505092915050565b600060ff82169050919050565b620002c181620002a9565b8114620002cd57600080fd5b50565b600081519050620002e181620002b6565b92915050565b60008060006060848603121562000303576200030262000120565b5b600084015167ffffffffffffffff81111562000324576200032362000125565b5b620003328682870162000276565b935050602084015167ffffffffffffffff81111562000356576200035562000125565b5b620003648682870162000276565b92505060406200037786828701620002d0565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003d457607f821691505b602082108103620003ea57620003e96200038c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620004577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000415565b62000463868362000415565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004b0620004aa620004a4846200047b565b62000485565b6200047b565b9050919050565b6000819050919050565b620004cc836200048f565b620004e4620004db82620004b7565b84845462000425565b825550505050565b600090565b620004fb620004ec565b62000508818484620004c1565b505050565b5b81811015620005305762000524600082620004f1565b6001810190506200050e565b5050565b601f8211156200057f576200054981620003f0565b620005548462000405565b8101602085101562000564578190505b6200057c620005738562000405565b8301826200050d565b50505b505050565b60008160020a8304905092915050565b6000620005a76000198460080262000584565b1980831691505092915050565b6000620005c2838362000594565b9150826002028217905092915050565b620005dd8262000381565b67ffffffffffffffff811115620005f957620005f862000145565b5b620006058254620003bb565b6200061282828562000534565b600060209050601f8311600181146200064a576000841562000635578287015190505b620006418582620005b4565b865550620006b1565b601f1984166200065a86620003f0565b60005b8281101562000684578489015182556001820191506020850194506020810190506200065d565b86831015620006a45784890151620006a0601f89168262000594565b8355505b6001600288020188555050505b505050505050565b6114b780620006c96000396000f3fe608060405234801561001057600080fd5b5060043610610112576000357c010000000000000000000000000000000000000000000000000000000090048063449a52f8116100b4578063983b2d5611610083578063983b2d56146102cd578063a9059cbb146102fd578063dd62ed3e1461032d578063f2fde38b1461035d57610112565b8063449a52f81461023157806370a08231146102615780638da5cb5b1461029157806395d89b41146102af57610112565b806318160ddd116100f057806318160ddd1461019557806323b872dd146101b35780633092afd5146101e3578063313ce5671461021357610112565b806301ffc9a71461011757806306fdde0314610147578063095ea7b314610165575b600080fd5b610131600480360381019061012c9190611056565b61038d565b60405161013e919061109e565b60405180910390f35b61014f6104e1565b60405161015c9190611149565b60405180910390f35b61017f600480360381019061017a91906111ff565b61056f565b60405161018c919061109e565b60405180910390f35b61019d6106f3565b6040516101aa919061124e565b60405180910390f35b6101cd60048036038101906101c89190611269565b6106f9565b6040516101da919061109e565b60405180910390f35b6101fd60048036038101906101f891906112bc565b610a0b565b60405161020a919061109e565b60405180910390f35b61021b610afd565b6040516102289190611305565b60405180910390f35b61024b600480360381019061024691906111ff565b610b10565b604051610258919061109e565b60405180910390f35b61027b600480360381019061027691906112bc565b610c46565b604051610288919061124e565b60405180910390f35b610299610c5e565b6040516102a6919061132f565b60405180910390f35b6102b7610c82565b6040516102c49190611149565b60405180910390f35b6102e760048036038101906102e291906112bc565b610d10565b6040516102f4919061109e565b60405180910390f35b610317600480360381019061031291906111ff565b610dcb565b604051610324919061109e565b60405180910390f35b6103476004803603810190610342919061134a565b610f34565b604051610354919061124e565b60405180910390f35b610377600480360381019061037291906112bc565b610f59565b604051610384919061109e565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036103e157600190506104dc565b63449a52f87c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361043357600190506104dc565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361048557600190506104dc565b639493f8b27c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036104d757600190506104dc565b600090505b919050565b600280546104ee906113b9565b80601f016020809104026020016040519081016040528092919081815260200182805461051a906113b9565b80156105675780601f1061053c57610100808354040283529160200191610567565b820191906000526020600020905b81548152906001019060200180831161054a57829003601f168201915b505050505081565b600080821115610603576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461060257600080fd5b5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516106e1919061124e565b60405180910390a36001905092915050565b60055481565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561078457600080fd5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156107d057600080fd5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108589190611419565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109279190611419565b9250508190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461097d919061144d565b925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f939856040516109f8919061124e565b60405180910390a4600190509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a9357508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a9c57600080fd5b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600460009054906101000a900460ff1681565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b6857600080fd5b81600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb7919061144d565b925050819055508160056000828254610bd0919061144d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f884604051610c34919061124e565b60405180910390a36001905092915050565b60066020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60038054610c8f906113b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbb906113b9565b8015610d085780601f10610cdd57610100808354040283529160200191610d08565b820191906000526020600020905b815481529060010190602001808311610ceb57829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6b57600080fd5b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610e1957600080fd5b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e689190611419565b9250508190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ebe919061144d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f22919061124e565b60405180910390a36001905092915050565b6007602052816000526040600020602052806000526040600020600091509150505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb457600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61103381610ffe565b811461103e57600080fd5b50565b6000813590506110508161102a565b92915050565b60006020828403121561106c5761106b610ff9565b5b600061107a84828501611041565b91505092915050565b60008115159050919050565b61109881611083565b82525050565b60006020820190506110b3600083018461108f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156110f35780820151818401526020810190506110d8565b60008484015250505050565b6000601f19601f8301169050919050565b600061111b826110b9565b61112581856110c4565b93506111358185602086016110d5565b61113e816110ff565b840191505092915050565b600060208201905081810360008301526111638184611110565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111968261116b565b9050919050565b6111a68161118b565b81146111b157600080fd5b50565b6000813590506111c38161119d565b92915050565b6000819050919050565b6111dc816111c9565b81146111e757600080fd5b50565b6000813590506111f9816111d3565b92915050565b6000806040838503121561121657611215610ff9565b5b6000611224858286016111b4565b9250506020611235858286016111ea565b9150509250929050565b611248816111c9565b82525050565b6000602082019050611263600083018461123f565b92915050565b60008060006060848603121561128257611281610ff9565b5b6000611290868287016111b4565b93505060206112a1868287016111b4565b92505060406112b2868287016111ea565b9150509250925092565b6000602082840312156112d2576112d1610ff9565b5b60006112e0848285016111b4565b91505092915050565b600060ff82169050919050565b6112ff816112e9565b82525050565b600060208201905061131a60008301846112f6565b92915050565b6113298161118b565b82525050565b60006020820190506113446000830184611320565b92915050565b6000806040838503121561136157611360610ff9565b5b600061136f858286016111b4565b9250506020611380858286016111b4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806113d157607f821691505b6020821081036113e4576113e361138a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611424826111c9565b915061142f836111c9565b9250828203905081811115611447576114466113ea565b5b92915050565b6000611458826111c9565b9150611463836111c9565b925082820190508082111561147b5761147a6113ea565b5b9291505056fea2646970667358221220e2a42897323e3c91e89d281271f2465e848b8fcacf8710047b9f694e059389e764736f6c63430008110033 \ No newline at end of file diff --git a/solidity/StaticToken.bin b/solidity/StaticToken.bin index d14aaa8..83106fd 100644 --- a/solidity/StaticToken.bin +++ b/solidity/StaticToken.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b506040516200145c3803806200145c833981810160405281019062000037919062000400565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600290805190602001906200008f9291906200013a565b508260039080519060200190620000a89291906200013a565b5081600460006101000a81548160ff021916908360ff1602179055508060058190555080600660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505062000514565b8280546200014890620004df565b90600052602060002090601f0160209004810192826200016c5760008555620001b8565b82601f106200018757805160ff1916838001178555620001b8565b82800160010185558215620001b8579182015b82811115620001b75782518255916020019190600101906200019a565b5b509050620001c79190620001cb565b5090565b5b80821115620001e6576000816000905550600101620001cc565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002538262000208565b810181811067ffffffffffffffff8211171562000275576200027462000219565b5b80604052505050565b60006200028a620001ea565b905062000298828262000248565b919050565b600067ffffffffffffffff821115620002bb57620002ba62000219565b5b620002c68262000208565b9050602081019050919050565b60005b83811015620002f3578082015181840152602081019050620002d6565b8381111562000303576000848401525b50505050565b6000620003206200031a846200029d565b6200027e565b9050828152602081018484840111156200033f576200033e62000203565b5b6200034c848285620002d3565b509392505050565b600082601f8301126200036c576200036b620001fe565b5b81516200037e84826020860162000309565b91505092915050565b600060ff82169050919050565b6200039f8162000387565b8114620003ab57600080fd5b50565b600081519050620003bf8162000394565b92915050565b6000819050919050565b620003da81620003c5565b8114620003e657600080fd5b50565b600081519050620003fa81620003cf565b92915050565b600080600080608085870312156200041d576200041c620001f4565b5b600085015167ffffffffffffffff8111156200043e576200043d620001f9565b5b6200044c8782880162000354565b945050602085015167ffffffffffffffff81111562000470576200046f620001f9565b5b6200047e8782880162000354565b93505060406200049187828801620003ae565b9250506060620004a487828801620003e9565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004f857607f821691505b6020821081036200050e576200050d620004b0565b5b50919050565b610f3880620005246000396000f3fe608060405234801561001057600080fd5b50600436106100bb576000357c010000000000000000000000000000000000000000000000000000000090048063313ce56711610083578063313ce5671461018c57806370a08231146101aa57806395d89b41146101da578063a9059cbb146101f8578063dd62ed3e14610228576100bb565b806301ffc9a7146100c057806306fdde03146100f0578063095ea7b31461010e57806318160ddd1461013e57806323b872dd1461015c575b600080fd5b6100da60048036038101906100d59190610ad6565b610258565b6040516100e79190610b1e565b60405180910390f35b6100f8610308565b6040516101059190610bd2565b60405180910390f35b61012860048036038101906101239190610c88565b610396565b6040516101359190610b1e565b60405180910390f35b61014661051a565b6040516101539190610cd7565b60405180910390f35b61017660048036038101906101719190610cf2565b610520565b6040516101839190610b1e565b60405180910390f35b610194610832565b6040516101a19190610d61565b60405180910390f35b6101c460048036038101906101bf9190610d7c565b610845565b6040516101d19190610cd7565b60405180910390f35b6101e261085d565b6040516101ef9190610bd2565b60405180910390f35b610212600480360381019061020d9190610c88565b6108eb565b60405161021f9190610b1e565b60405180910390f35b610242600480360381019061023d9190610da9565b610a54565b60405161024f9190610cd7565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036102ac5760019050610303565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036102fe5760019050610303565b600090505b919050565b6002805461031590610e18565b80601f016020809104026020016040519081016040528092919081815260200182805461034190610e18565b801561038e5780601f106103635761010080835404028352916020019161038e565b820191906000526020600020905b81548152906001019060200180831161037157829003601f168201915b505050505081565b60008082111561042a576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461042957600080fd5b5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105089190610cd7565b60405180910390a36001905092915050565b60055481565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156105ab57600080fd5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156105f757600080fd5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461067f9190610e78565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461074e9190610e78565b9250508190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107a49190610eac565b925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f9398560405161081f9190610cd7565b60405180910390a4600190509392505050565b600460009054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b6003805461086a90610e18565b80601f016020809104026020016040519081016040528092919081815260200182805461089690610e18565b80156108e35780601f106108b8576101008083540402835291602001916108e3565b820191906000526020600020905b8154815290600101906020018083116108c657829003601f168201915b505050505081565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561093957600080fd5b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109889190610e78565b9250508190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109de9190610eac565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a429190610cd7565b60405180910390a36001905092915050565b6007602052816000526040600020602052806000526040600020600091509150505481565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610ab381610a7e565b8114610abe57600080fd5b50565b600081359050610ad081610aaa565b92915050565b600060208284031215610aec57610aeb610a79565b5b6000610afa84828501610ac1565b91505092915050565b60008115159050919050565b610b1881610b03565b82525050565b6000602082019050610b336000830184610b0f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b73578082015181840152602081019050610b58565b83811115610b82576000848401525b50505050565b6000601f19601f8301169050919050565b6000610ba482610b39565b610bae8185610b44565b9350610bbe818560208601610b55565b610bc781610b88565b840191505092915050565b60006020820190508181036000830152610bec8184610b99565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c1f82610bf4565b9050919050565b610c2f81610c14565b8114610c3a57600080fd5b50565b600081359050610c4c81610c26565b92915050565b6000819050919050565b610c6581610c52565b8114610c7057600080fd5b50565b600081359050610c8281610c5c565b92915050565b60008060408385031215610c9f57610c9e610a79565b5b6000610cad85828601610c3d565b9250506020610cbe85828601610c73565b9150509250929050565b610cd181610c52565b82525050565b6000602082019050610cec6000830184610cc8565b92915050565b600080600060608486031215610d0b57610d0a610a79565b5b6000610d1986828701610c3d565b9350506020610d2a86828701610c3d565b9250506040610d3b86828701610c73565b9150509250925092565b600060ff82169050919050565b610d5b81610d45565b82525050565b6000602082019050610d766000830184610d52565b92915050565b600060208284031215610d9257610d91610a79565b5b6000610da084828501610c3d565b91505092915050565b60008060408385031215610dc057610dbf610a79565b5b6000610dce85828601610c3d565b9250506020610ddf85828601610c3d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e3057607f821691505b602082108103610e4357610e42610de9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e8382610c52565b9150610e8e83610c52565b925082821015610ea157610ea0610e49565b5b828203905092915050565b6000610eb782610c52565b9150610ec283610c52565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610ef757610ef6610e49565b5b82820190509291505056fea2646970667358221220bafee9924aff7624f09b6f4830e10b7d6de45c027b6dc360d549303b3b89f83164736f6c634300080d0033 \ No newline at end of file +60806040523480156200001157600080fd5b506040516200163338038062001633833981810160405281019062000037919062000338565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600290816200008891906200062f565b5082600390816200009a91906200062f565b5081600460006101000a81548160ff021916908360ff1602179055508060058190555080600660008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505062000716565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000195826200014a565b810181811067ffffffffffffffff82111715620001b757620001b66200015b565b5b80604052505050565b6000620001cc6200012c565b9050620001da82826200018a565b919050565b600067ffffffffffffffff821115620001fd57620001fc6200015b565b5b62000208826200014a565b9050602081019050919050565b60005b838110156200023557808201518184015260208101905062000218565b60008484015250505050565b6000620002586200025284620001df565b620001c0565b90508281526020810184848401111562000277576200027662000145565b5b6200028484828562000215565b509392505050565b600082601f830112620002a457620002a362000140565b5b8151620002b684826020860162000241565b91505092915050565b600060ff82169050919050565b620002d781620002bf565b8114620002e357600080fd5b50565b600081519050620002f781620002cc565b92915050565b6000819050919050565b6200031281620002fd565b81146200031e57600080fd5b50565b600081519050620003328162000307565b92915050565b6000806000806080858703121562000355576200035462000136565b5b600085015167ffffffffffffffff8111156200037657620003756200013b565b5b62000384878288016200028c565b945050602085015167ffffffffffffffff811115620003a857620003a76200013b565b5b620003b6878288016200028c565b9350506040620003c987828801620002e6565b9250506060620003dc8782880162000321565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200043b57607f821691505b602082108103620004515762000450620003f3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b60008160020a8302905092915050565b600060088302620004be7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200047c565b620004ca86836200047c565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200050d620005076200050184620002fd565b620004e2565b620002fd565b9050919050565b6000819050919050565b6200052983620004ec565b62000541620005388262000514565b8484546200048c565b825550505050565b600090565b6200055862000549565b620005658184846200051e565b505050565b5b818110156200058d57620005816000826200054e565b6001810190506200056b565b5050565b601f821115620005dc57620005a68162000457565b620005b1846200046c565b81016020851015620005c1578190505b620005d9620005d0856200046c565b8301826200056a565b50505b505050565b60008160020a8304905092915050565b60006200060460001984600802620005e1565b1980831691505092915050565b60006200061f8383620005f1565b9150826002028217905092915050565b6200063a82620003e8565b67ffffffffffffffff8111156200065657620006556200015b565b5b62000662825462000422565b6200066f82828562000591565b600060209050601f831160018114620006a7576000841562000692578287015190505b6200069e858262000611565b8655506200070e565b601f198416620006b78662000457565b60005b82811015620006e157848901518255600182019150602085019450602081019050620006ba565b86831015620007015784890151620006fd601f891682620005f1565b8355505b6001600288020188555050505b505050505050565b610f0d80620007266000396000f3fe608060405234801561001057600080fd5b50600436106100bb576000357c010000000000000000000000000000000000000000000000000000000090048063313ce56711610083578063313ce5671461018c57806370a08231146101aa57806395d89b41146101da578063a9059cbb146101f8578063dd62ed3e14610228576100bb565b806301ffc9a7146100c057806306fdde03146100f0578063095ea7b31461010e57806318160ddd1461013e57806323b872dd1461015c575b600080fd5b6100da60048036038101906100d59190610ad6565b610258565b6040516100e79190610b1e565b60405180910390f35b6100f8610308565b6040516101059190610bc9565b60405180910390f35b61012860048036038101906101239190610c7f565b610396565b6040516101359190610b1e565b60405180910390f35b61014661051a565b6040516101539190610cce565b60405180910390f35b61017660048036038101906101719190610ce9565b610520565b6040516101839190610b1e565b60405180910390f35b610194610832565b6040516101a19190610d58565b60405180910390f35b6101c460048036038101906101bf9190610d73565b610845565b6040516101d19190610cce565b60405180910390f35b6101e261085d565b6040516101ef9190610bc9565b60405180910390f35b610212600480360381019061020d9190610c7f565b6108eb565b60405161021f9190610b1e565b60405180910390f35b610242600480360381019061023d9190610da0565b610a54565b60405161024f9190610cce565b60405180910390f35b600063c6bb4b707c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036102ac5760019050610303565b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916036102fe5760019050610303565b600090505b919050565b6002805461031590610e0f565b80601f016020809104026020016040519081016040528092919081815260200182805461034190610e0f565b801561038e5780601f106103635761010080835404028352916020019161038e565b820191906000526020600020905b81548152906001019060200180831161037157829003601f168201915b505050505081565b60008082111561042a576000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461042957600080fd5b5b81600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105089190610cce565b60405180910390a36001905092915050565b60055481565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156105ab57600080fd5b81600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156105f757600080fd5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461067f9190610e6f565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461074e9190610e6f565b9250508190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546107a49190610ea3565b925050819055503373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f5f7542858008eeb041631f30e6109ae94b83a58e9a58261dd2c42c508850f9398560405161081f9190610cce565b60405180910390a4600190509392505050565b600460009054906101000a900460ff1681565b60066020528060005260406000206000915090505481565b6003805461086a90610e0f565b80601f016020809104026020016040519081016040528092919081815260200182805461089690610e0f565b80156108e35780601f106108b8576101008083540402835291602001916108e3565b820191906000526020600020905b8154815290600101906020018083116108c657829003601f168201915b505050505081565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561093957600080fd5b81600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109889190610e6f565b9250508190555081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109de9190610ea3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a429190610cce565b60405180910390a36001905092915050565b6007602052816000526040600020602052806000526040600020600091509150505481565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610ab381610a7e565b8114610abe57600080fd5b50565b600081359050610ad081610aaa565b92915050565b600060208284031215610aec57610aeb610a79565b5b6000610afa84828501610ac1565b91505092915050565b60008115159050919050565b610b1881610b03565b82525050565b6000602082019050610b336000830184610b0f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b73578082015181840152602081019050610b58565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b9b82610b39565b610ba58185610b44565b9350610bb5818560208601610b55565b610bbe81610b7f565b840191505092915050565b60006020820190508181036000830152610be38184610b90565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610c1682610beb565b9050919050565b610c2681610c0b565b8114610c3157600080fd5b50565b600081359050610c4381610c1d565b92915050565b6000819050919050565b610c5c81610c49565b8114610c6757600080fd5b50565b600081359050610c7981610c53565b92915050565b60008060408385031215610c9657610c95610a79565b5b6000610ca485828601610c34565b9250506020610cb585828601610c6a565b9150509250929050565b610cc881610c49565b82525050565b6000602082019050610ce36000830184610cbf565b92915050565b600080600060608486031215610d0257610d01610a79565b5b6000610d1086828701610c34565b9350506020610d2186828701610c34565b9250506040610d3286828701610c6a565b9150509250925092565b600060ff82169050919050565b610d5281610d3c565b82525050565b6000602082019050610d6d6000830184610d49565b92915050565b600060208284031215610d8957610d88610a79565b5b6000610d9784828501610c34565b91505092915050565b60008060408385031215610db757610db6610a79565b5b6000610dc585828601610c34565b9250506020610dd685828601610c34565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e2757607f821691505b602082108103610e3a57610e39610de0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e7a82610c49565b9150610e8583610c49565b9250828203905081811115610e9d57610e9c610e40565b5b92915050565b6000610eae82610c49565b9150610eb983610c49565b9250828201905080821115610ed157610ed0610e40565b5b9291505056fea2646970667358221220755c477962182ceac261aad365f8966b6630c338f915e0432cb3bd146f69e93164736f6c63430008110033 \ No newline at end of file