60806040526100126100ff60201b60201c565b60ff16600a61002191906105d4565b620f424061002f919061061e565b60065534801561003d575f80fd5b506040518060400160405280600481526020017ff09f8e81000000000000000000000000000000000000000000000000000000008152506040518060400160405280601881526020017ff09f8e81e29e9c5b20424f4e55532d4554482e4e4554205d000000000000000081525081600390816100b99190610890565b5080600490816100c99190610890565b5050506100e86100dd61010760201b60201c565b61010e60201b60201c565b6100fa336006546101d160201b60201c565b610a47565b5f6012905090565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610241575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610238919061099e565b60405180910390fd5b6102525f838361025660201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102a6578060025f82825461029a91906109b7565b92505081905550610374565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561032f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610326939291906109f9565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103bb578060025f8282540392505081905550610405565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516104629190610a2e565b60405180910390a3505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156104f1578086048111156104cd576104cc61046f565b5b60018516156104dc5780820291505b80810290506104ea8561049c565b94506104b1565b94509492505050565b5f8261050957600190506105c4565b81610516575f90506105c4565b816001811461052c576002811461053657610565565b60019150506105c4565b60ff8411156105485761054761046f565b5b8360020a91508482111561055f5761055e61046f565b5b506105c4565b5060208310610133831016604e8410600b841016171561059a5782820a9050838111156105955761059461046f565b5b6105c4565b6105a784848460016104a8565b925090508184048111156105be576105bd61046f565b5b81810290505b9392505050565b5f819050919050565b5f6105de826105cb565b91506105e9836105cb565b92506106167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846104fa565b905092915050565b5f610628826105cb565b9150610633836105cb565b9250828202610641816105cb565b915082820484148315176106585761065761046f565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806106da57607f821691505b6020821081036106ed576106ec610696565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261074f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610714565b6107598683610714565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61079461078f61078a846105cb565b610771565b6105cb565b9050919050565b5f819050919050565b6107ad8361077a565b6107c16107b98261079b565b848454610720565b825550505050565b5f90565b6107d56107c9565b6107e08184846107a4565b505050565b5b81811015610803576107f85f826107cd565b6001810190506107e6565b5050565b601f82111561084857610819816106f3565b61082284610705565b81016020851015610831578190505b61084561083d85610705565b8301826107e5565b50505b505050565b5f82821c905092915050565b5f6108685f198460080261084d565b1980831691505092915050565b5f6108808383610859565b9150826002028217905092915050565b6108998261065f565b67ffffffffffffffff8111156108b2576108b1610669565b5b6108bc82546106c3565b6108c7828285610807565b5f60209050601f8311600181146108f8575f84156108e6578287015190505b6108f08582610875565b865550610957565b601f198416610906866106f3565b5f5b8281101561092d57848901518255600182019150602085019450602081019050610908565b8683101561094a5784890151610946601f891682610859565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6109888261095f565b9050919050565b6109988161097e565b82525050565b5f6020820190506109b15f83018461098f565b92915050565b5f6109c1826105cb565b91506109cc836105cb565b92508282019050808211156109e4576109e361046f565b5b92915050565b6109f3816105cb565b82525050565b5f606082019050610a0c5f83018661098f565b610a1960208301856109ea565b610a2660408301846109ea565b949350505050565b5f602082019050610a415f8301846109ea565b92915050565b61195b80610a545f395ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c806370a082311161009557806395d89b411161006457806395d89b4114610298578063a9059cbb146102b6578063dd62ed3e146102e6578063f2fde38b14610316576100fe565b806370a0823114610224578063715018a614610254578063819b25ba1461025e5780638da5cb5b1461027a576100fe565b806323b872dd116100d157806323b872dd1461019e578063313ce567146101ce57806343807e58146101ec578063441ff99814610208576100fe565b806306fdde0314610102578063095ea7b314610120578063099219391461015057806318160ddd14610180575b5f80fd5b61010a610332565b604051610117919061121c565b60405180910390f35b61013a600480360381019061013591906112d1565b6103c2565b6040516101479190611329565b60405180910390f35b61016a600480360381019061016591906112d1565b6103e4565b6040516101779190611329565b60405180910390f35b610188610406565b6040516101959190611351565b60405180910390f35b6101b860048036038101906101b3919061136a565b61040f565b6040516101c59190611329565b60405180910390f35b6101d661043d565b6040516101e391906113d5565b60405180910390f35b6102066004803603810190610201919061144f565b610445565b005b610222600480360381019061021d919061144f565b6104bd565b005b61023e6004803603810190610239919061149a565b61058f565b60405161024b9190611351565b60405180910390f35b61025c6105d4565b005b610278600480360381019061027391906114c5565b61065b565b005b610282610705565b60405161028f91906114ff565b60405180910390f35b6102a061072d565b6040516102ad919061121c565b60405180910390f35b6102d060048036038101906102cb91906112d1565b6107bd565b6040516102dd9190611329565b60405180910390f35b61030060048036038101906102fb9190611518565b6107df565b60405161030d9190611351565b60405180910390f35b610330600480360381019061032b919061149a565b610861565b005b60606003805461034190611583565b80601f016020809104026020016040519081016040528092919081815260200182805461036d90611583565b80156103b85780601f1061038f576101008083540402835291602001916103b8565b820191905f5260205f20905b81548152906001019060200180831161039b57829003601f168201915b5050505050905090565b5f806103cc610957565b90506103d981858561095e565b600191505092915050565b5f806103ee610957565b90506103fb818585610970565b600191505092915050565b5f600254905090565b5f80610419610957565b9050610426858285610980565b610431858585610a12565b60019150509392505050565b5f6012905090565b5f61044e61043d565b60ff16600a61045d919061170f565b60016104699190611759565b90505f5b838390508110156104b7576104aa3385858481811061048f5761048e61179a565b5b90506020020160208101906104a4919061149a565b84610a12565b808060010191505061046d565b50505050565b5f6104c661043d565b60ff16600a6104d5919061170f565b60016104e19190611759565b90505f5b83839050811015610589578383828181106105035761050261179a565b5b9050602002016020810190610518919061149a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105749190611351565b60405180910390a380806001019150506104e5565b50505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6105dc610957565b73ffffffffffffffffffffffffffffffffffffffff166105fa610705565b73ffffffffffffffffffffffffffffffffffffffff1614610650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064790611811565b60405180910390fd5b6106595f610b02565b565b610663610957565b73ffffffffffffffffffffffffffffffffffffffff16610681610705565b73ffffffffffffffffffffffffffffffffffffffff16146106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce90611811565b60405180910390fd5b610702336106e361043d565b60ff16600a6106f2919061170f565b836106fd9190611759565b610bc5565b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461073c90611583565b80601f016020809104026020016040519081016040528092919081815260200182805461076890611583565b80156107b35780601f1061078a576101008083540402835291602001916107b3565b820191905f5260205f20905b81548152906001019060200180831161079657829003601f168201915b5050505050905090565b5f806107c7610957565b90506107d4818585610a12565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610869610957565b73ffffffffffffffffffffffffffffffffffffffff16610887610705565b73ffffffffffffffffffffffffffffffffffffffff16146108dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d490611811565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361094b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109429061189f565b60405180910390fd5b61095481610b02565b50565b5f33905090565b61096b8383836001610c44565b505050565b61097b838383610e13565b505050565b5f61098b84846107df565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a0c57818110156109fd578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016109f4939291906118bd565b60405180910390fd5b610a0b84848484035f610c44565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a82575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610a7991906114ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610af2575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610ae991906114ff565b60405180910390fd5b610afd838383610f93565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c35575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610c2c91906114ff565b60405180910390fd5b610c405f8383610f93565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610cb4575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610cab91906114ff565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d24575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610d1b91906114ff565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610e0d578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e049190611351565b60405180910390a35b50505050565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610e9c578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610e93939291906118bd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f859190611351565b60405180910390a350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fe3578060025f828254610fd791906118f2565b925050819055506110b1565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561106c578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611063939291906118bd565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f8578060025f8282540392505081905550611142565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161119f9190611351565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6111ee826111ac565b6111f881856111b6565b93506112088185602086016111c6565b611211816111d4565b840191505092915050565b5f6020820190508181035f83015261123481846111e4565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61126d82611244565b9050919050565b61127d81611263565b8114611287575f80fd5b50565b5f8135905061129881611274565b92915050565b5f819050919050565b6112b08161129e565b81146112ba575f80fd5b50565b5f813590506112cb816112a7565b92915050565b5f80604083850312156112e7576112e661123c565b5b5f6112f48582860161128a565b9250506020611305858286016112bd565b9150509250929050565b5f8115159050919050565b6113238161130f565b82525050565b5f60208201905061133c5f83018461131a565b92915050565b61134b8161129e565b82525050565b5f6020820190506113645f830184611342565b92915050565b5f805f606084860312156113815761138061123c565b5b5f61138e8682870161128a565b935050602061139f8682870161128a565b92505060406113b0868287016112bd565b9150509250925092565b5f60ff82169050919050565b6113cf816113ba565b82525050565b5f6020820190506113e85f8301846113c6565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261140f5761140e6113ee565b5b8235905067ffffffffffffffff81111561142c5761142b6113f2565b5b602083019150836020820283011115611448576114476113f6565b5b9250929050565b5f80602083850312156114655761146461123c565b5b5f83013567ffffffffffffffff81111561148257611481611240565b5b61148e858286016113fa565b92509250509250929050565b5f602082840312156114af576114ae61123c565b5b5f6114bc8482850161128a565b91505092915050565b5f602082840312156114da576114d961123c565b5b5f6114e7848285016112bd565b91505092915050565b6114f981611263565b82525050565b5f6020820190506115125f8301846114f0565b92915050565b5f806040838503121561152e5761152d61123c565b5b5f61153b8582860161128a565b925050602061154c8582860161128a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061159a57607f821691505b6020821081036115ad576115ac611556565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561163557808604811115611611576116106115b3565b5b60018516156116205780820291505b808102905061162e856115e0565b94506115f5565b94509492505050565b5f8261164d5760019050611708565b8161165a575f9050611708565b8160018114611670576002811461167a576116a9565b6001915050611708565b60ff84111561168c5761168b6115b3565b5b8360020a9150848211156116a3576116a26115b3565b5b50611708565b5060208310610133831016604e8410600b84101617156116de5782820a9050838111156116d9576116d86115b3565b5b611708565b6116eb84848460016115ec565b92509050818404811115611702576117016115b3565b5b81810290505b9392505050565b5f6117198261129e565b91506117248361129e565b92506117517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461163e565b905092915050565b5f6117638261129e565b915061176e8361129e565b925082820261177c8161129e565b91508282048414831517611793576117926115b3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6117fb6020836111b6565b9150611806826117c7565b602082019050919050565b5f6020820190508181035f830152611828816117ef565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6118896026836111b6565b91506118948261182f565b604082019050919050565b5f6020820190508181035f8301526118b68161187d565b9050919050565b5f6060820190506118d05f8301866114f0565b6118dd6020830185611342565b6118ea6040830184611342565b949350505050565b5f6118fc8261129e565b91506119078361129e565b925082820190508082111561191f5761191e6115b3565b5b9291505056fea26469706673582212209182f626147ff03c15635e0fe655bada2a78e7eb995ed0903674fa6f639cf05764736f6c634300081a0033