60806040526100126100fe60201b60201c565b600a61001e9190610515565b600a61002a919061055f565b600555348015610038575f80fd5b506040516118a03803806118a0833981810160405281019061005a91906105ce565b6040518060400160405280600681526020017f54657468657200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f555344540000000000000000000000000000000000000000000000000000000081525081600390816100d5919061082a565b5080600490816100e5919061082a565b5050506100f8338261010660201b60201c565b506109e1565b5f6006905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610176575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161016d9190610938565b60405180910390fd5b6101875f838361018b60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101db578060025f8282546101cf9190610951565b925050819055506102a9565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610264578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161025b93929190610993565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102f0578060025f828254039250508190555061033a565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161039791906109c8565b60405180910390a3505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561042657808604811115610402576104016103a4565b5b60018516156104115780820291505b808102905061041f856103d1565b94506103e6565b94509492505050565b5f8261043e57600190506104f9565b8161044b575f90506104f9565b8160018114610461576002811461046b5761049a565b60019150506104f9565b60ff84111561047d5761047c6103a4565b5b8360020a915084821115610494576104936103a4565b5b506104f9565b5060208310610133831016604e8410600b84101617156104cf5782820a9050838111156104ca576104c96103a4565b5b6104f9565b6104dc84848460016103dd565b925090508184048111156104f3576104f26103a4565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61051f82610500565b915061052a83610509565b92506105577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461042f565b905092915050565b5f61056982610500565b915061057483610500565b925082820261058281610500565b91508282048414831517610599576105986103a4565b5b5092915050565b5f80fd5b6105ad81610500565b81146105b7575f80fd5b50565b5f815190506105c8816105a4565b92915050565b5f602082840312156105e3576105e26105a0565b5b5f6105f0848285016105ba565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061067457607f821691505b60208210810361068757610686610630565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106e97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106ae565b6106f386836106ae565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61072e61072961072484610500565b61070b565b610500565b9050919050565b5f819050919050565b61074783610714565b61075b61075382610735565b8484546106ba565b825550505050565b5f90565b61076f610763565b61077a81848461073e565b505050565b5b8181101561079d576107925f82610767565b600181019050610780565b5050565b601f8211156107e2576107b38161068d565b6107bc8461069f565b810160208510156107cb578190505b6107df6107d78561069f565b83018261077f565b50505b505050565b5f82821c905092915050565b5f6108025f19846008026107e7565b1980831691505092915050565b5f61081a83836107f3565b9150826002028217905092915050565b610833826105f9565b67ffffffffffffffff81111561084c5761084b610603565b5b610856825461065d565b6108618282856107a1565b5f60209050601f831160018114610892575f8415610880578287015190505b61088a858261080f565b8655506108f1565b601f1984166108a08661068d565b5f5b828110156108c7578489015182556001820191506020850194506020810190506108a2565b868310156108e457848901516108e0601f8916826107f3565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610922826108f9565b9050919050565b61093281610918565b82525050565b5f60208201905061094b5f830184610929565b92915050565b5f61095b82610500565b915061096683610500565b925082820190508082111561097e5761097d6103a4565b5b92915050565b61098d81610500565b82525050565b5f6060820190506109a65f830186610929565b6109b36020830185610984565b6109c06040830184610984565b949350505050565b5f6020820190506109db5f830184610984565b92915050565b610eb2806109ee5f395ff3fe608060405234801561000f575f80fd5b50600436106100a7575f3560e01c806370a082311161006f57806370a082311461016557806395d89b41146101955780639c281430146101b3578063a9059cbb146101d1578063dd62ed3e14610201578063de5f72fd14610231576100a7565b806306fdde03146100ab578063095ea7b3146100c957806318160ddd146100f957806323b872dd14610117578063313ce56714610147575b5f80fd5b6100b361023b565b6040516100c09190610b2b565b60405180910390f35b6100e360048036038101906100de9190610bdc565b6102cb565b6040516100f09190610c34565b60405180910390f35b6101016102ed565b60405161010e9190610c5c565b60405180910390f35b610131600480360381019061012c9190610c75565b6102f6565b60405161013e9190610c34565b60405180910390f35b61014f610324565b60405161015c9190610ce0565b60405180910390f35b61017f600480360381019061017a9190610cf9565b61032c565b60405161018c9190610c5c565b60405180910390f35b61019d610371565b6040516101aa9190610b2b565b60405180910390f35b6101bb610401565b6040516101c89190610c5c565b60405180910390f35b6101eb60048036038101906101e69190610bdc565b610407565b6040516101f89190610c34565b60405180910390f35b61021b60048036038101906102169190610d24565b610429565b6040516102289190610c5c565b60405180910390f35b6102396104ab565b005b60606003805461024a90610d8f565b80601f016020809104026020016040519081016040528092919081815260200182805461027690610d8f565b80156102c15780601f10610298576101008083540402835291602001916102c1565b820191905f5260205f20905b8154815290600101906020018083116102a457829003601f168201915b5050505050905090565b5f806102d56104b9565b90506102e28185856104c0565b600191505092915050565b5f600254905090565b5f806103006104b9565b905061030d8582856104d2565b610318858585610564565b60019150509392505050565b5f6006905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461038090610d8f565b80601f01602080910402602001604051908101604052809291908181526020018280546103ac90610d8f565b80156103f75780601f106103ce576101008083540402835291602001916103f7565b820191905f5260205f20905b8154815290600101906020018083116103da57829003601f168201915b5050505050905090565b60055481565b5f806104116104b9565b905061041e818585610564565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6104b733600554610654565b565b5f33905090565b6104cd83838360016106d3565b505050565b5f6104dd8484610429565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461055e578181101561054f578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161054693929190610dce565b60405180910390fd5b61055d84848484035f6106d3565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105d4575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105cb9190610e03565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610644575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161063b9190610e03565b60405180910390fd5b61064f8383836108a2565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106c4575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106bb9190610e03565b60405180910390fd5b6106cf5f83836108a2565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610743575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161073a9190610e03565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107b3575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107aa9190610e03565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801561089c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108939190610c5c565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108f2578060025f8282546108e69190610e49565b925050819055506109c0565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561097b578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161097293929190610dce565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a07578060025f8282540392505081905550610a51565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610aae9190610c5c565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610afd82610abb565b610b078185610ac5565b9350610b17818560208601610ad5565b610b2081610ae3565b840191505092915050565b5f6020820190508181035f830152610b438184610af3565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b7882610b4f565b9050919050565b610b8881610b6e565b8114610b92575f80fd5b50565b5f81359050610ba381610b7f565b92915050565b5f819050919050565b610bbb81610ba9565b8114610bc5575f80fd5b50565b5f81359050610bd681610bb2565b92915050565b5f8060408385031215610bf257610bf1610b4b565b5b5f610bff85828601610b95565b9250506020610c1085828601610bc8565b9150509250929050565b5f8115159050919050565b610c2e81610c1a565b82525050565b5f602082019050610c475f830184610c25565b92915050565b610c5681610ba9565b82525050565b5f602082019050610c6f5f830184610c4d565b92915050565b5f805f60608486031215610c8c57610c8b610b4b565b5b5f610c9986828701610b95565b9350506020610caa86828701610b95565b9250506040610cbb86828701610bc8565b9150509250925092565b5f60ff82169050919050565b610cda81610cc5565b82525050565b5f602082019050610cf35f830184610cd1565b92915050565b5f60208284031215610d0e57610d0d610b4b565b5b5f610d1b84828501610b95565b91505092915050565b5f8060408385031215610d3a57610d39610b4b565b5b5f610d4785828601610b95565b9250506020610d5885828601610b95565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610da657607f821691505b602082108103610db957610db8610d62565b5b50919050565b610dc881610b6e565b82525050565b5f606082019050610de15f830186610dbf565b610dee6020830185610c4d565b610dfb6040830184610c4d565b949350505050565b5f602082019050610e165f830184610dbf565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e5382610ba9565b9150610e5e83610ba9565b9250828201905080821115610e7657610e75610e1c565b5b9291505056fea26469706673582212209e49f3038a3975ec2f7e807f421399a211f3fcc19190b7c14cd47822844c3a6364736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000064