0x608060405260095f60146101000a81548160ff021916908360ff1602179055505f60149054906101000a900460ff16600a61003a91906103b0565b64019dc792ac61004a91906103fa565b600155737f3d1eda82f0f280129bb622f3a99698df7cb40760045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600560146101000a81548160ff0219169083151502179055505f600560156101000a81548160ff0219169083151502179055506001600660146101000a81548160ff02191690831515021790555034801561014f575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060015460035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600154604051610232919061044a565b60405180910390a3610463565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156102c15780860481111561029d5761029c61023f565b5b60018516156102ac5780820291505b80810290506102ba8561026c565b9450610281565b94509492505050565b5f826102d95760019050610394565b816102e6575f9050610394565b81600181146102fc576002811461030657610335565b6001915050610394565b60ff8411156103185761031761023f565b5b8360020a91508482111561032f5761032e61023f565b5b50610394565b5060208310610133831016604e8410600b841016171561036a5782820a9050838111156103655761036461023f565b5b610394565b6103778484846001610278565b9250905081840481111561038e5761038d61023f565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f6103ba8261039b565b91506103c5836103a4565b92506103f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846102ca565b905092915050565b5f6104048261039b565b915061040f8361039b565b925082820261041d8161039b565b915082820484148315176104345761043361023f565b5b5092915050565b6104448161039b565b82525050565b5f60208201905061045d5f83018461043b565b92915050565b611ced806104705f395ff3fe6080604052600436106100dc575f3560e01c806370a082311161007e57806395d89b411161005857806395d89b4114610286578063a0ef91df146102b0578063a9059cbb146102c6578063dd62ed3e14610302576100dc565b806370a082311461020a578063715018a6146102465780638da5cb5b1461025c576100dc565b806323b872dd116100ba57806323b872dd14610170578063293230b8146101ac578063313ce567146101b657806349bd5a5e146101e0576100dc565b806306fdde03146100e0578063095ea7b31461010a57806318160ddd14610146575b5f80fd5b3480156100eb575f80fd5b506100f461033e565b604051610101919061146e565b60405180910390f35b348015610115575f80fd5b50610130600480360381019061012b919061151f565b61037b565b60405161013d9190611577565b60405180910390f35b348015610151575f80fd5b5061015a610391565b604051610167919061159f565b60405180910390f35b34801561017b575f80fd5b50610196600480360381019061019191906115b8565b61039a565b6040516101a39190611577565b60405180910390f35b6101b4610446565b005b3480156101c1575f80fd5b506101ca6108a9565b6040516101d79190611623565b60405180910390f35b3480156101eb575f80fd5b506101f46108be565b604051610201919061164b565b60405180910390f35b348015610215575f80fd5b50610230600480360381019061022b9190611664565b6108e3565b60405161023d919061159f565b60405180910390f35b348015610251575f80fd5b5061025a610929565b005b348015610267575f80fd5b50610270610a58565b60405161027d919061164b565b60405180910390f35b348015610291575f80fd5b5061029a610a7f565b6040516102a7919061146e565b60405180910390f35b3480156102bb575f80fd5b506102c4610abc565b005b3480156102d1575f80fd5b506102ec60048036038101906102e7919061151f565b610b9c565b6040516102f99190611577565b60405180910390f35b34801561030d575f80fd5b506103286004803603810190610323919061168f565b610bb2565b604051610335919061159f565b60405180910390f35b60606040518060400160405280601681526020017f4e617a69447761726653657869456c6636394d696c6b00000000000000000000815250905090565b5f610387338484610c34565b6001905092915050565b5f600154905090565b5f6103a6848484610df7565b61043b84336104368560025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111cf90919063ffffffff16565b610c34565b600190509392505050565b3373ffffffffffffffffffffffffffffffffffffffff16610465610a58565b73ffffffffffffffffffffffffffffffffffffffff16146104bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b290611717565b60405180910390fd5b600560149054906101000a900460ff16156104d4575f80fd5b6105023060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154610c34565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561056d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105919190611749565b905060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106219190611749565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630836040518363ffffffff1660e01b815260040161065b929190611774565b6020604051808303815f875af1158015610677573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069b9190611749565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430610722306108e3565b5f8061072c610a58565b426040518863ffffffff1660e01b815260040161074e969594939291906117dd565b60606040518083038185885af115801561076a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061078f9190611850565b50505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161082f9291906118a0565b6020604051808303815f875af115801561084b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086f91906118f1565b506001600560146101000a81548160ff0219169083151502179055506001600660146101000a81548160ff02191690831515021790555050565b5f8060149054906101000a900460ff16905090565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610948610a58565b73ffffffffffffffffffffffffffffffffffffffff161461099e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099590611717565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f454c460000000000000000000000000000000000000000000000000000000000815250905090565b5f4711610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590611966565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b56575f80fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b99573d5f803e3d5ffd5b50565b5f610ba8338484610df7565b6001905092915050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c99906119f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790611a82565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610dea919061159f565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c90611aea565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90611b78565b60405180910390fd5b5f8111610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90611c06565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610f9e575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015610ff7575060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561103e57600560159054906101000a900460ff1661103d5761103c8260045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611218565b5b5b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905061109282826111cf90919063ffffffff16565b60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506111238260035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461137690919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516111c1919061159f565b60405180910390a350505050565b5f61121083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061139c565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127d906119f4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90611a82565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b5f8082846113849190611c51565b905083811015611392575f80fd5b8091505092915050565b5f8383111582906113e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113da919061146e565b60405180910390fd5b505f83856113f19190611c84565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611440826113fe565b61144a8185611408565b935061145a818560208601611418565b61146381611426565b840191505092915050565b5f6020820190508181035f8301526114868184611436565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6114bb82611492565b9050919050565b6114cb816114b1565b81146114d5575f80fd5b50565b5f813590506114e6816114c2565b92915050565b5f819050919050565b6114fe816114ec565b8114611508575f80fd5b50565b5f81359050611519816114f5565b92915050565b5f80604083850312156115355761153461148e565b5b5f611542858286016114d8565b92505060206115538582860161150b565b9150509250929050565b5f8115159050919050565b6115718161155d565b82525050565b5f60208201905061158a5f830184611568565b92915050565b611599816114ec565b82525050565b5f6020820190506115b25f830184611590565b92915050565b5f805f606084860312156115cf576115ce61148e565b5b5f6115dc868287016114d8565b93505060206115ed868287016114d8565b92505060406115fe8682870161150b565b9150509250925092565b5f60ff82169050919050565b61161d81611608565b82525050565b5f6020820190506116365f830184611614565b92915050565b611645816114b1565b82525050565b5f60208201905061165e5f83018461163c565b92915050565b5f602082840312156116795761167861148e565b5b5f611686848285016114d8565b91505092915050565b5f80604083850312156116a5576116a461148e565b5b5f6116b2858286016114d8565b92505060206116c3858286016114d8565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f611701602083611408565b915061170c826116cd565b602082019050919050565b5f6020820190508181035f83015261172e816116f5565b9050919050565b5f81519050611743816114c2565b92915050565b5f6020828403121561175e5761175d61148e565b5b5f61176b84828501611735565b91505092915050565b5f6040820190506117875f83018561163c565b611794602083018461163c565b9392505050565b5f819050919050565b5f819050919050565b5f6117c76117c26117bd8461179b565b6117a4565b6114ec565b9050919050565b6117d7816117ad565b82525050565b5f60c0820190506117f05f83018961163c565b6117fd6020830188611590565b61180a60408301876117ce565b61181760608301866117ce565b611824608083018561163c565b61183160a0830184611590565b979650505050505050565b5f8151905061184a816114f5565b92915050565b5f805f606084860312156118675761186661148e565b5b5f6118748682870161183c565b93505060206118858682870161183c565b92505060406118968682870161183c565b9150509250925092565b5f6040820190506118b35f83018561163c565b6118c06020830184611590565b9392505050565b6118d08161155d565b81146118da575f80fd5b50565b5f815190506118eb816118c7565b92915050565b5f602082840312156119065761190561148e565b5b5f611913848285016118dd565b91505092915050565b7f546f6b656e3a206e6f2045544820696e2074686520636f6e74726163740000005f82015250565b5f611950601d83611408565b915061195b8261191c565b602082019050919050565b5f6020820190508181035f83015261197d81611944565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6119de602483611408565b91506119e982611984565b604082019050919050565b5f6020820190508181035f830152611a0b816119d2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f611a6c602283611408565b9150611a7782611a12565b604082019050919050565b5f6020820190508181035f830152611a9981611a60565b9050919050565b7f4552433a207472616e7366657220746f207a65726f20616464726573732100005f82015250565b5f611ad4601e83611408565b9150611adf82611aa0565b602082019050919050565b5f6020820190508181035f830152611b0181611ac8565b9050919050565b7f4552433a207472616e736665722066726f6d20746865207a65726f20616464725f8201527f6573732100000000000000000000000000000000000000000000000000000000602082015250565b5f611b62602483611408565b9150611b6d82611b08565b604082019050919050565b5f6020820190508181035f830152611b8f81611b56565b9050919050565b7f7472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f2100000000000000000000000000000000000000000000602082015250565b5f611bf0602a83611408565b9150611bfb82611b96565b604082019050919050565b5f6020820190508181035f830152611c1d81611be4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611c5b826114ec565b9150611c66836114ec565b9250828201905080821115611c7e57611c7d611c24565b5b92915050565b5f611c8e826114ec565b9150611c99836114ec565b9250828203905081811115611cb157611cb0611c24565b5b9291505056fea2646970667358221220e0ff7ed84b92844b7502bdbd0dedb08a792c03079fe6d6fc8ad3bf7262d4d75264736f6c634300081a0033