0x608060405234801562000010575f80fd5b506040518060400160405280600e81526020017f43686572727920426c6f73736f6d0000000000000000000000000000000000008152506040518060400160405280600281526020017f434200000000000000000000000000000000000000000000000000000000000081525081600290816200008e919062000326565b508060039081620000a0919062000326565b50620000b1620000be60201b60201c565b5f8190555050506200040a565b5f90565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200013e57607f821691505b602082108103620001545762000153620000f9565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620001b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200017b565b620001c486836200017b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200020e620002086200020284620001dc565b620001e5565b620001dc565b9050919050565b5f819050919050565b6200022983620001ee565b62000241620002388262000215565b84845462000187565b825550505050565b5f90565b6200025762000249565b620002648184846200021e565b505050565b5b818110156200028b576200027f5f826200024d565b6001810190506200026a565b5050565b601f821115620002da57620002a4816200015a565b620002af846200016c565b81016020851015620002bf578190505b620002d7620002ce856200016c565b83018262000269565b50505b505050565b5f82821c905092915050565b5f620002fc5f1984600802620002df565b1980831691505092915050565b5f620003168383620002eb565b9150826002028217905092915050565b6200033182620000c2565b67ffffffffffffffff8111156200034d576200034c620000cc565b5b62000359825462000126565b620003668282856200028f565b5f60209050601f8311600181146200039c575f841562000387578287015190505b62000393858262000309565b86555062000402565b601f198416620003ac866200015a565b5f5b82811015620003d557848901518255600182019150602085019450602081019050620003ae565b86831015620003f55784890151620003f1601f891682620002eb565b8355505b6001600288020188555050505b505050505050565b61197a80620004185f395ff3fe6080604052600436106100e7575f3560e01c80636352211e11610089578063a22cb46511610058578063a22cb465146102c9578063b88d4fde146102f1578063c87b56dd1461030d578063e985e9c514610349576100e7565b80636352211e1461020b57806370a082311461024757806395d89b4114610283578063a0712d68146102ad576100e7565b8063095ea7b3116100c5578063095ea7b31461018d57806318160ddd146101a957806323b872dd146101d357806342842e0e146101ef576100e7565b806301ffc9a7146100eb57806306fdde0314610127578063081812fc14610151575b5f80fd5b3480156100f6575f80fd5b50610111600480360381019061010c9190611240565b610385565b60405161011e9190611285565b60405180910390f35b348015610132575f80fd5b5061013b610416565b6040516101489190611328565b60405180910390f35b34801561015c575f80fd5b506101776004803603810190610172919061137b565b6104a6565b60405161018491906113e5565b60405180910390f35b6101a760048036038101906101a29190611428565b6104ff565b005b3480156101b4575f80fd5b506101bd61050f565b6040516101ca9190611475565b60405180910390f35b6101ed60048036038101906101e8919061148e565b610524565b005b6102096004803603810190610204919061148e565b6107cf565b005b348015610216575f80fd5b50610231600480360381019061022c919061137b565b6107ee565b60405161023e91906113e5565b60405180910390f35b348015610252575f80fd5b5061026d600480360381019061026891906114de565b6107ff565b60405161027a9190611475565b60405180910390f35b34801561028e575f80fd5b50610297610893565b6040516102a49190611328565b60405180910390f35b6102c760048036038101906102c2919061137b565b610923565b005b3480156102d4575f80fd5b506102ef60048036038101906102ea9190611533565b610930565b005b61030b6004803603810190610306919061169d565b610a36565b005b348015610318575f80fd5b50610333600480360381019061032e919061137b565b610a87565b6040516103409190611328565b60405180910390f35b348015610354575f80fd5b5061036f600480360381019061036a919061171d565b610b01565b60405161037c9190611285565b60405180910390f35b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103df57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061040f5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b60606002805461042590611788565b80601f016020809104026020016040519081016040528092919081815260200182805461045190611788565b801561049c5780601f106104735761010080835404028352916020019161049c565b820191905f5260205f20905b81548152906001019060200180831161047f57829003601f168201915b5050505050905090565b5f6104b082610b8f565b6104c5576104c463cf4700e460e01b610c01565b5b60065f8381526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61050b82826001610c09565b5050565b5f610518610d33565b6001545f540303905090565b5f61052e82610d37565b905073ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161693508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146105a3576105a263a114810060e01b610c01565b5b5f806105ae84610e19565b915091506105c481876105bf610e3c565b610e43565b6105ef576105d9866105d4610e3c565b610b01565b6105ee576105ed6359c896be60e01b610c01565b5b5b6105fc8686866001610e86565b8015610606575f82555b60055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055506106ce856106aa888887610e8c565b7c020000000000000000000000000000000000000000000000000000000017610eb3565b60045f8681526020019081526020015f20819055505f7c020000000000000000000000000000000000000000000000000000000084160361074a575f6001850190505f60045f8381526020019081526020015f205403610748575f548114610747578360045f8381526020019081526020015f20819055505b5b505b5f73ffffffffffffffffffffffffffffffffffffffff8673ffffffffffffffffffffffffffffffffffffffff161690508481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a45f81036107b9576107b863ea553b3460e01b610c01565b5b6107c68787876001610edd565b50505050505050565b6107e983838360405180602001604052805f815250610a36565b505050565b5f6107f882610d37565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361084457610843638f4eb60460e01b610c01565b5b67ffffffffffffffff60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b6060600380546108a290611788565b80601f01602080910402602001604051908101604052809291908181526020018280546108ce90611788565b80156109195780601f106108f057610100808354040283529160200191610919565b820191905f5260205f20905b8154815290600101906020018083116108fc57829003601f168201915b5050505050905090565b61092d3382610ee3565b50565b8060075f61093c610e3c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166109e5610e3c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610a2a9190611285565b60405180910390a35050565b610a41848484610524565b5f8373ffffffffffffffffffffffffffffffffffffffff163b14610a8157610a6b84848484611034565b610a8057610a7f63d1a57ed660e01b610c01565b5b5b50505050565b6060610a9282610b8f565b610aa757610aa663a14c4b5060e01b610c01565b5b5f610ab061115e565b90505f815103610ace5760405180602001604052805f815250610af9565b80610ad884611174565b604051602001610ae99291906117f2565b6040516020818303038152906040525b915050919050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f81610b99610d33565b11610bfc575f54821015610bfb575f5b5f60045f8581526020019081526020015f205491508103610bd55782610bce90611842565b9250610ba9565b5f7c01000000000000000000000000000000000000000000000000000000008216149150505b5b919050565b805f5260045ffd5b5f610c13836107ee565b9050818015610c5557508073ffffffffffffffffffffffffffffffffffffffff16610c3c610e3c565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c8157610c6b81610c66610e3c565b610b01565b610c8057610c7f63cfb3b94260e01b610c01565b5b5b8360065f8581526020019081526020015f205f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a450505050565b5f90565b5f81610d41610d33565b11610e035760045f8381526020019081526020015f205490505f8103610ddb575f548210610d7a57610d7963df2d9b4260e01b610c01565b5b5b60045f836001900393508381526020019081526020015f205490505f810315610dd6575f7c010000000000000000000000000000000000000000000000000000000082160315610e1457610dd563df2d9b4260e01b610c01565b5b610d7b565b5f7c010000000000000000000000000000000000000000000000000000000082160315610e14575b610e1363df2d9b4260e01b610c01565b5b919050565b5f805f60065f8581526020019081526020015f2090508092508254915050915091565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b5f8060e883901c905060e8610ea28686846111c3565b62ffffff16901b9150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b5f805490505f8203610f0057610eff63b562e8dd60e01b610c01565b5b610f0c5f848385610e86565b610f2a83610f1b5f865f610e8c565b610f24856111cb565b17610eb3565b60045f8381526020019081526020015f2081905550600160406001901b17820260055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505f73ffffffffffffffffffffffffffffffffffffffff8473ffffffffffffffffffffffffffffffffffffffff161690505f8103610fdb57610fda632e07630060e01b610c01565b5b5f83830190505f8390505b80835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4818160010191508103610fe657815f8190555050505061102f5f848385610edd565b505050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611059610e3c565b8786866040518563ffffffff1660e01b815260040161107b94939291906118bb565b6020604051808303815f875af19250505080156110b657506040513d601f19601f820116820180604052508101906110b39190611919565b60015b61110b573d805f81146110e4576040519150601f19603f3d011682016040523d82523d5f602084013e6110e9565b606091505b505f8151036111035761110263d1a57ed660e01b610c01565b5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060405180602001604052805f815250905090565b606060a060405101806040526020810391505f825281835b6001156111ae57600184039350600a81066030018453600a810490508061118c575b50828103602084039350808452505050919050565b5f9392505050565b5f6001821460e11b9050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61121f816111eb565b8114611229575f80fd5b50565b5f8135905061123a81611216565b92915050565b5f60208284031215611255576112546111e3565b5b5f6112628482850161122c565b91505092915050565b5f8115159050919050565b61127f8161126b565b82525050565b5f6020820190506112985f830184611276565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156112d55780820151818401526020810190506112ba565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6112fa8261129e565b61130481856112a8565b93506113148185602086016112b8565b61131d816112e0565b840191505092915050565b5f6020820190508181035f83015261134081846112f0565b905092915050565b5f819050919050565b61135a81611348565b8114611364575f80fd5b50565b5f8135905061137581611351565b92915050565b5f602082840312156113905761138f6111e3565b5b5f61139d84828501611367565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6113cf826113a6565b9050919050565b6113df816113c5565b82525050565b5f6020820190506113f85f8301846113d6565b92915050565b611407816113c5565b8114611411575f80fd5b50565b5f81359050611422816113fe565b92915050565b5f806040838503121561143e5761143d6111e3565b5b5f61144b85828601611414565b925050602061145c85828601611367565b9150509250929050565b61146f81611348565b82525050565b5f6020820190506114885f830184611466565b92915050565b5f805f606084860312156114a5576114a46111e3565b5b5f6114b286828701611414565b93505060206114c386828701611414565b92505060406114d486828701611367565b9150509250925092565b5f602082840312156114f3576114f26111e3565b5b5f61150084828501611414565b91505092915050565b6115128161126b565b811461151c575f80fd5b50565b5f8135905061152d81611509565b92915050565b5f8060408385031215611549576115486111e3565b5b5f61155685828601611414565b92505060206115678582860161151f565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6115af826112e0565b810181811067ffffffffffffffff821117156115ce576115cd611579565b5b80604052505050565b5f6115e06111da565b90506115ec82826115a6565b919050565b5f67ffffffffffffffff82111561160b5761160a611579565b5b611614826112e0565b9050602081019050919050565b828183375f83830152505050565b5f61164161163c846115f1565b6115d7565b90508281526020810184848401111561165d5761165c611575565b5b611668848285611621565b509392505050565b5f82601f83011261168457611683611571565b5b813561169484826020860161162f565b91505092915050565b5f805f80608085870312156116b5576116b46111e3565b5b5f6116c287828801611414565b94505060206116d387828801611414565b93505060406116e487828801611367565b925050606085013567ffffffffffffffff811115611705576117046111e7565b5b61171187828801611670565b91505092959194509250565b5f8060408385031215611733576117326111e3565b5b5f61174085828601611414565b925050602061175185828601611414565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061179f57607f821691505b6020821081036117b2576117b161175b565b5b50919050565b5f81905092915050565b5f6117cc8261129e565b6117d681856117b8565b93506117e68185602086016112b8565b80840191505092915050565b5f6117fd82856117c2565b915061180982846117c2565b91508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61184c82611348565b91505f820361185e5761185d611815565b5b600182039050919050565b5f81519050919050565b5f82825260208201905092915050565b5f61188d82611869565b6118978185611873565b93506118a78185602086016112b8565b6118b0816112e0565b840191505092915050565b5f6080820190506118ce5f8301876113d6565b6118db60208301866113d6565b6118e86040830185611466565b81810360608301526118fa8184611883565b905095945050505050565b5f8151905061191381611216565b92915050565b5f6020828403121561192e5761192d6111e3565b5b5f61193b84828501611905565b9150509291505056fea2646970667358221220c679039cbeda4f32ac45ba1dc30d13b2d9c092754a082e901907f01dc2734a2864736f6c63430008140033