608060405234801561000f575f80fd5b50336040518060400160405280600581526020017f4d794e46540000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4e465400000000000000000000000000000000000000000000000000000000815250815f908161008b9190610420565b50806001908161009b9190610420565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010e575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610105919061052e565b60405180910390fd5b61011d8161012360201b60201c565b50610547565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061026157607f821691505b6020821081036102745761027361021d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102d67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261029b565b6102e0868361029b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61032461031f61031a846102f8565b610301565b6102f8565b9050919050565b5f819050919050565b61033d8361030a565b6103516103498261032b565b8484546102a7565b825550505050565b5f90565b610365610359565b610370818484610334565b505050565b5b81811015610393576103885f8261035d565b600181019050610376565b5050565b601f8211156103d8576103a98161027a565b6103b28461028c565b810160208510156103c1578190505b6103d56103cd8561028c565b830182610375565b50505b505050565b5f82821c905092915050565b5f6103f85f19846008026103dd565b1980831691505092915050565b5f61041083836103e9565b9150826002028217905092915050565b610429826101e6565b67ffffffffffffffff811115610442576104416101f0565b5b61044c825461024a565b610457828285610397565b5f60209050601f831160018114610488575f8415610476578287015190505b6104808582610405565b8655506104e7565b601f1984166104968661027a565b5f5b828110156104bd57848901518255600182019150602085019450602081019050610498565b868310156104da57848901516104d6601f8916826103e9565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610518826104ef565b9050919050565b6105288161050e565b82525050565b5f6020820190506105415f83018461051f565b92915050565b6124f2806105545f395ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c8063715018a6116100a0578063b88d4fde1161006f578063b88d4fde146102a1578063c87b56dd146102bd578063d0def521146102ed578063e985e9c514610309578063f2fde38b1461033957610109565b8063715018a61461023f5780638da5cb5b1461024957806395d89b4114610267578063a22cb4651461028557610109565b806323b872dd116100dc57806323b872dd146101a757806342842e0e146101c35780636352211e146101df57806370a082311461020f57610109565b806301ffc9a71461010d57806306fdde031461013d578063081812fc1461015b578063095ea7b31461018b575b5f80fd5b61012760048036038101906101229190611a39565b610355565b6040516101349190611a7e565b60405180910390f35b6101456103b5565b6040516101529190611b07565b60405180910390f35b61017560048036038101906101709190611b5a565b610444565b6040516101829190611bc4565b60405180910390f35b6101a560048036038101906101a09190611c07565b61045f565b005b6101c160048036038101906101bc9190611c45565b610475565b005b6101dd60048036038101906101d89190611c45565b610574565b005b6101f960048036038101906101f49190611b5a565b610593565b6040516102069190611bc4565b60405180910390f35b61022960048036038101906102249190611c95565b6105a4565b6040516102369190611ccf565b60405180910390f35b61024761065a565b005b61025161066d565b60405161025e9190611bc4565b60405180910390f35b61026f610695565b60405161027c9190611b07565b60405180910390f35b61029f600480360381019061029a9190611d12565b610725565b005b6102bb60048036038101906102b69190611e7c565b61073b565b005b6102d760048036038101906102d29190611b5a565b610758565b6040516102e49190611b07565b60405180910390f35b61030760048036038101906103029190611f9a565b610863565b005b610323600480360381019061031e9190611ff4565b610898565b6040516103309190611a7e565b60405180910390f35b610353600480360381019061034e9190611c95565b610926565b005b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103ae57506103ad826109aa565b5b9050919050565b60605f80546103c39061205f565b80601f01602080910402602001604051908101604052809291908181526020018280546103ef9061205f565b801561043a5780601f106104115761010080835404028352916020019161043a565b820191905f5260205f20905b81548152906001019060200180831161041d57829003601f168201915b5050505050905090565b5f61044e82610a8b565b5061045882610b11565b9050919050565b610471828261046c610b4a565b610b51565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104e5575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016104dc9190611bc4565b60405180910390fd5b5f6104f883836104f3610b4a565b610b63565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461056e578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105659392919061208f565b60405180910390fd5b50505050565b61058e83838360405180602001604052805f81525061073b565b505050565b5f61059d82610a8b565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610615575f6040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161060c9190611bc4565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610662610d6e565b61066b5f610df5565b565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546106a49061205f565b80601f01602080910402602001604051908101604052809291908181526020018280546106d09061205f565b801561071b5780601f106106f25761010080835404028352916020019161071b565b820191905f5260205f20905b8154815290600101906020018083116106fe57829003601f168201915b5050505050905090565b610737610730610b4a565b8383610eb8565b5050565b610746848484610475565b61075284848484611021565b50505050565b606061076382610a8b565b505f60065f8481526020019081526020015f2080546107819061205f565b80601f01602080910402602001604051908101604052809291908181526020018280546107ad9061205f565b80156107f85780601f106107cf576101008083540402835291602001916107f8565b820191905f5260205f20905b8154815290600101906020018083116107db57829003601f168201915b505050505090505f6108086111d3565b90505f81510361081c57819250505061085e565b5f825111156108505780826040516020016108389291906120fe565b6040516020818303038152906040529250505061085e565b610859846111e9565b925050505b919050565b61086b610d6e565b6108778260085461124f565b6108836008548261126c565b60085f81548092919060010191905055505050565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61092e610d6e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361099e575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109959190611bc4565b60405180910390fd5b6109a781610df5565b50565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a845750610a83826112c6565b5b9050919050565b5f80610a968361132f565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b0857826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610aff9190611ccf565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610b5e8383836001611368565b505050565b5f80610b6e8461132f565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610baf57610bae818486611527565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c3a57610bee5f855f80611368565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610cb957600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b610d76610b4a565b73ffffffffffffffffffffffffffffffffffffffff16610d9461066d565b73ffffffffffffffffffffffffffffffffffffffff1614610df357610db7610b4a565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610dea9190611bc4565b60405180910390fd5b565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f2857816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610f1f9190611bc4565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110149190611a7e565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b11156111cd578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611064610b4a565b8685856040518563ffffffff1660e01b81526004016110869493929190612173565b6020604051808303815f875af19250505080156110c157506040513d601f19601f820116820180604052508101906110be91906121d1565b60015b611142573d805f81146110ef576040519150601f19603f3d011682016040523d82523d5f602084013e6110f4565b606091505b505f81510361113a57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111319190611bc4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146111cb57836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016111c29190611bc4565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b60606111f482610a8b565b505f6111fe6111d3565b90505f81511161121c5760405180602001604052805f815250611247565b80611226846115ea565b6040516020016112379291906120fe565b6040516020818303038152906040525b915050919050565b611268828260405180602001604052805f8152506116b4565b5050565b8060065f8481526020019081526020015f20908161128a9190612399565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516112ba9190611ccf565b60405180910390a15050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806113a057505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156114d2575f6113af84610a8b565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561141957508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561142c575061142a8184610898565b155b1561146e57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016114659190611bc4565b60405180910390fd5b81156114d057838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6115328383836116cf565b6115e5575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115a657806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161159d9190611ccf565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016115dc929190612468565b60405180910390fd5b505050565b60605f60016115f88461178f565b0190505f8167ffffffffffffffff81111561161657611615611d58565b5b6040519080825280601f01601f1916602001820160405280156116485781602001600182028036833780820191505090505b5090505f82602001820190505b6001156116a9578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161169e5761169d61248f565b5b0494505f8503611655575b819350505050919050565b6116be83836118e0565b6116ca5f848484611021565b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561178657508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061174757506117468484610898565b5b8061178557508273ffffffffffffffffffffffffffffffffffffffff1661176d83610b11565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106117eb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816117e1576117e061248f565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611828576d04ee2d6d415b85acef8100000000838161181e5761181d61248f565b5b0492506020810190505b662386f26fc10000831061185757662386f26fc10000838161184d5761184c61248f565b5b0492506010810190505b6305f5e1008310611880576305f5e10083816118765761187561248f565b5b0492506008810190505b61271083106118a557612710838161189b5761189a61248f565b5b0492506004810190505b606483106118c857606483816118be576118bd61248f565b5b0492506002810190505b600a83106118d7576001810190505b80915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611950575f6040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016119479190611bc4565b60405180910390fd5b5f61195c83835f610b63565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146119ce575f6040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016119c59190611bc4565b60405180910390fd5b505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a18816119e4565b8114611a22575f80fd5b50565b5f81359050611a3381611a0f565b92915050565b5f60208284031215611a4e57611a4d6119dc565b5b5f611a5b84828501611a25565b91505092915050565b5f8115159050919050565b611a7881611a64565b82525050565b5f602082019050611a915f830184611a6f565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611ad982611a97565b611ae38185611aa1565b9350611af3818560208601611ab1565b611afc81611abf565b840191505092915050565b5f6020820190508181035f830152611b1f8184611acf565b905092915050565b5f819050919050565b611b3981611b27565b8114611b43575f80fd5b50565b5f81359050611b5481611b30565b92915050565b5f60208284031215611b6f57611b6e6119dc565b5b5f611b7c84828501611b46565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611bae82611b85565b9050919050565b611bbe81611ba4565b82525050565b5f602082019050611bd75f830184611bb5565b92915050565b611be681611ba4565b8114611bf0575f80fd5b50565b5f81359050611c0181611bdd565b92915050565b5f8060408385031215611c1d57611c1c6119dc565b5b5f611c2a85828601611bf3565b9250506020611c3b85828601611b46565b9150509250929050565b5f805f60608486031215611c5c57611c5b6119dc565b5b5f611c6986828701611bf3565b9350506020611c7a86828701611bf3565b9250506040611c8b86828701611b46565b9150509250925092565b5f60208284031215611caa57611ca96119dc565b5b5f611cb784828501611bf3565b91505092915050565b611cc981611b27565b82525050565b5f602082019050611ce25f830184611cc0565b92915050565b611cf181611a64565b8114611cfb575f80fd5b50565b5f81359050611d0c81611ce8565b92915050565b5f8060408385031215611d2857611d276119dc565b5b5f611d3585828601611bf3565b9250506020611d4685828601611cfe565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611d8e82611abf565b810181811067ffffffffffffffff82111715611dad57611dac611d58565b5b80604052505050565b5f611dbf6119d3565b9050611dcb8282611d85565b919050565b5f67ffffffffffffffff821115611dea57611de9611d58565b5b611df382611abf565b9050602081019050919050565b828183375f83830152505050565b5f611e20611e1b84611dd0565b611db6565b905082815260208101848484011115611e3c57611e3b611d54565b5b611e47848285611e00565b509392505050565b5f82601f830112611e6357611e62611d50565b5b8135611e73848260208601611e0e565b91505092915050565b5f805f8060808587031215611e9457611e936119dc565b5b5f611ea187828801611bf3565b9450506020611eb287828801611bf3565b9350506040611ec387828801611b46565b925050606085013567ffffffffffffffff811115611ee457611ee36119e0565b5b611ef087828801611e4f565b91505092959194509250565b5f67ffffffffffffffff821115611f1657611f15611d58565b5b611f1f82611abf565b9050602081019050919050565b5f611f3e611f3984611efc565b611db6565b905082815260208101848484011115611f5a57611f59611d54565b5b611f65848285611e00565b509392505050565b5f82601f830112611f8157611f80611d50565b5b8135611f91848260208601611f2c565b91505092915050565b5f8060408385031215611fb057611faf6119dc565b5b5f611fbd85828601611bf3565b925050602083013567ffffffffffffffff811115611fde57611fdd6119e0565b5b611fea85828601611f6d565b9150509250929050565b5f806040838503121561200a576120096119dc565b5b5f61201785828601611bf3565b925050602061202885828601611bf3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061207657607f821691505b60208210810361208957612088612032565b5b50919050565b5f6060820190506120a25f830186611bb5565b6120af6020830185611cc0565b6120bc6040830184611bb5565b949350505050565b5f81905092915050565b5f6120d882611a97565b6120e281856120c4565b93506120f2818560208601611ab1565b80840191505092915050565b5f61210982856120ce565b915061211582846120ce565b91508190509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f61214582612121565b61214f818561212b565b935061215f818560208601611ab1565b61216881611abf565b840191505092915050565b5f6080820190506121865f830187611bb5565b6121936020830186611bb5565b6121a06040830185611cc0565b81810360608301526121b2818461213b565b905095945050505050565b5f815190506121cb81611a0f565b92915050565b5f602082840312156121e6576121e56119dc565b5b5f6121f3848285016121bd565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026122587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261221d565b612262868361221d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61229d61229861229384611b27565b61227a565b611b27565b9050919050565b5f819050919050565b6122b683612283565b6122ca6122c2826122a4565b848454612229565b825550505050565b5f90565b6122de6122d2565b6122e98184846122ad565b505050565b5b8181101561230c576123015f826122d6565b6001810190506122ef565b5050565b601f82111561235157612322816121fc565b61232b8461220e565b8101602085101561233a578190505b61234e6123468561220e565b8301826122ee565b50505b505050565b5f82821c905092915050565b5f6123715f1984600802612356565b1980831691505092915050565b5f6123898383612362565b9150826002028217905092915050565b6123a282611a97565b67ffffffffffffffff8111156123bb576123ba611d58565b5b6123c5825461205f565b6123d0828285612310565b5f60209050601f831160018114612401575f84156123ef578287015190505b6123f9858261237e565b865550612460565b601f19841661240f866121fc565b5f5b8281101561243657848901518255600182019150602085019450602081019050612411565b86831015612453578489015161244f601f891682612362565b8355505b6001600288020188555050505b505050505050565b5f60408201905061247b5f830185611bb5565b6124886020830184611cc0565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffdfea264697066735822122003e63c5e97b2c86f6d5f069d448fef34bfd3f9c93049688d058d9be194d023c764736f6c63430008190033