60806040526012600a62000014919062000718565b6276adf162000024919062000855565b6006556032600755603260085560006009556000600a556000600b556103e8600c556001600d556001600e55600260125560966013553480156200006757600080fd5b506000339050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000600654905080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001b49190620006a0565b60405180910390a3737a250d5630b4cf539739df2c5dacb4c659f2488d601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027a57600080fd5b505afa1580156200028f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b591906200061f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033a57600080fd5b505afa1580156200034f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037591906200061f565b6040518363ffffffff1660e01b81526004016200039492919062000673565b602060405180830381600087803b158015620003af57600080fd5b505af1158015620003c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ea91906200061f565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160056000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200095c565b600081519050620006198162000942565b92915050565b60006020828403121562000638576200063762000930565b5b6000620006488482850162000608565b91505092915050565b6200065c81620008b6565b82525050565b6200066d81620008ea565b82525050565b60006040820190506200068a600083018562000651565b62000699602083018462000651565b9392505050565b6000602082019050620006b7600083018462000662565b92915050565b6000808291508390505b60018511156200070f57808604811115620006e757620006e662000901565b5b6001851615620006f75780820291505b8081029050620007078562000935565b9450620006c7565b94509492505050565b60006200072582620008ea565b91506200073283620008f4565b9250620007617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000769565b905092915050565b6000826200077b57600190506200084e565b816200078b57600090506200084e565b8160018114620007a45760028114620007af57620007e5565b60019150506200084e565b60ff841115620007c457620007c362000901565b5b8360020a915084821115620007de57620007dd62000901565b5b506200084e565b5060208310610133831016604e8410600b84101617156200081f5782820a90508381111562000819576200081862000901565b5b6200084e565b6200082e8484846001620006bd565b9250905081840481111562000848576200084762000901565b5b81810290505b9392505050565b60006200086282620008ea565b91506200086f83620008ea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008ab57620008aa62000901565b5b828202905092915050565b6000620008c382620008ca565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b60008160011c9050919050565b6200094d81620008b6565b81146200095957600080fd5b50565b614d75806200096c6000396000f3fe6080604052600436106102cd5760003560e01c80638124f7ac11610175578063be617fa0116100dc578063d8bd2dd111610095578063e0d2f9eb1161006f578063e0d2f9eb14610acf578063e52fb9ec14610af8578063f2fde38b14610b23578063f5fb756f14610b4c576102d4565b8063d8bd2dd114610a18578063dbe66ca014610a55578063dd62ed3e14610a92576102d4565b8063be617fa014610906578063c3a3c03214610931578063c3f4f54f1461095c578063cc1776d314610987578063cfd1940e146109b2578063d46b6a30146109db576102d4565b8063a457c2d71161012e578063a457c2d7146107f8578063a68bdac714610835578063a9059cbb1461084c578063ab64cfdc14610889578063b40d09e2146108b2578063bc43d849146108dd576102d4565b80638124f7ac146106fa578063817d4bff14610725578063868b01411461074e5780638da5cb5b1461077757806395d89b41146107a25780639b39b65f146107cd576102d4565b806333ae8325116102345780635149f984116101ed57806370a08231116101c757806370a0823114610664578063715018a6146106a157806375f0a874146106b85780637b9e987a146106e3576102d4565b80635149f984146105e557806351bc3c851461060e578063629ece4914610639576102d4565b806333ae8325146104e9578063395093511461051257806341aec3571461054f57806346e35f0314610566578063479881bf146105915780634f7041a5146105ba576102d4565b80631d4eaead116102865780631d4eaead146103d95780631eb25d131461040457806323b872dd1461042f5780632d48f84f1461046c578063313ce567146104955780633227925f146104c0576102d4565b80630612f39d146102d957806306fdde03146102f0578063095ea7b31461031b5780630eff4c641461035857806318160ddd146103835780631d2cb02d146103ae576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610b77565b005b3480156102fc57600080fd5b50610305610dbc565b60405161031291906140ca565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906139ed565b610df9565b60405161034f91906140af565b60405180910390f35b34801561036457600080fd5b5061036d610e10565b60405161037a919061438c565b60405180910390f35b34801561038f57600080fd5b50610398610e16565b6040516103a5919061438c565b60405180910390f35b3480156103ba57600080fd5b506103c3610e20565b6040516103d0919061438c565b60405180910390f35b3480156103e557600080fd5b506103ee610e26565b6040516103fb919061438c565b60405180910390f35b34801561041057600080fd5b50610419610e2c565b604051610426919061438c565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061395a565b610e4b565b60405161046391906140af565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613b34565b610f3e565b005b3480156104a157600080fd5b506104aa6110ce565b6040516104b79190614462565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613a87565b6110d7565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613a87565b611136565b005b34801561051e57600080fd5b50610539600480360381019061053491906139ed565b611203565b60405161054691906140af565b60405180910390f35b34801561055b57600080fd5b506105646112a1565b005b34801561057257600080fd5b5061057b6112f5565b60405161058891906140af565b60405180910390f35b34801561059d57600080fd5b506105b860048036038101906105b39190613a87565b61137c565b005b3480156105c657600080fd5b506105cf611449565b6040516105dc919061438c565b60405180910390f35b3480156105f157600080fd5b5061060c600480360381019061060791906139ad565b61144f565b005b34801561061a57600080fd5b50610623611583565b60405161063091906140af565b60405180910390f35b34801561064557600080fd5b5061064e611596565b60405161065b919061438c565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906138c0565b61159c565b604051610698919061438c565b60405180910390f35b3480156106ad57600080fd5b506106b66115e5565b005b3480156106c457600080fd5b506106cd611718565b6040516106da9190613fe1565b60405180910390f35b3480156106ef57600080fd5b506106f861173e565b005b34801561070657600080fd5b5061070f611800565b60405161071c919061438c565b60405180910390f35b34801561073157600080fd5b5061074c600480360381019061074791906138c0565b611806565b005b34801561075a57600080fd5b5061077560048036038101906107709190613a2d565b6118a4565b005b34801561078357600080fd5b5061078c611909565b6040516107999190613fe1565b60405180910390f35b3480156107ae57600080fd5b506107b7611932565b6040516107c491906140ca565b60405180910390f35b3480156107d957600080fd5b506107e261196f565b6040516107ef91906140af565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a91906139ed565b611982565b60405161082c91906140af565b60405180910390f35b34801561084157600080fd5b5061084a611a68565b005b34801561085857600080fd5b50610873600480360381019061086e91906139ed565b611acd565b60405161088091906140af565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906139ad565b611ae4565b005b3480156108be57600080fd5b506108c7611c2f565b6040516108d4919061438c565b60405180910390f35b3480156108e957600080fd5b5061090460048036038101906108ff9190613a87565b611c35565b005b34801561091257600080fd5b5061091b611c96565b604051610928919061438c565b60405180910390f35b34801561093d57600080fd5b50610946611c9c565b604051610953919061438c565b60405180910390f35b34801561096857600080fd5b50610971611cc5565b60405161097e919061438c565b60405180910390f35b34801561099357600080fd5b5061099c611d41565b6040516109a9919061438c565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190613a87565b611d47565b005b3480156109e757600080fd5b50610a0260048036038101906109fd91906138c0565b611da7565b604051610a0f91906140af565b60405180910390f35b348015610a2457600080fd5b50610a3f6004803603810190610a3a91906138c0565b611dc7565b604051610a4c91906140af565b60405180910390f35b348015610a6157600080fd5b50610a7c6004803603810190610a7791906138c0565b611de7565b604051610a8991906140af565b60405180910390f35b348015610a9e57600080fd5b50610ab96004803603810190610ab4919061391a565b611e07565b604051610ac6919061438c565b60405180910390f35b348015610adb57600080fd5b50610af66004803603810190610af191906139ad565b611e8e565b005b348015610b0457600080fd5b50610b0d611fd9565b604051610b1a919061438c565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906138c0565b611fdf565b005b348015610b5857600080fd5b50610b61612181565b604051610b6e919061438c565b60405180910390f35b610b8033612187565b610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb6906141ec565b60405180910390fd5b601654421015610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb9061410c565b60405180910390fd5b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c669190613fe1565b60206040518083038186803b158015610c7e57600080fd5b505afa158015610c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb69190613ab4565b9050601760009054906101000a900460ff1615610cfe5762093a8042610cdc91906144dd565b601681905550600a600282610cf191906146d5565b610cfb9190614533565b90505b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610d39929190614025565b602060405180830381600087803b158015610d5357600080fd5b505af1158015610d67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8b9190613a5a565b507f28bacca46f5c57fe13623e9d5093cb2fab892814aca9b39384ab86550d9aa67560405160405180910390a15050565b60606040518060400160405280600881526020017f4d62617050657065000000000000000000000000000000000000000000000000815250905090565b6000610e0633848461221e565b6001905092915050565b60135481565b6000600654905090565b600c5481565b600a5481565b6012600a610e3a91906145b7565b6276adf1610e4891906146d5565b81565b6000610e588484846123e9565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f13906141cc565b60405180910390fd5b610f3285338584610f2d919061472f565b61221e565b60019150509392505050565b610f4733612187565b610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d906141ec565b60405180910390fd5b60006002600a6103e8610f999190614533565b610fa39190614533565b9050808711158015610fb55750808611155b8015610fc15750808511155b611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061420c565b60405180910390fd5b6103e882848661101091906144dd565b61101a91906144dd565b1461105a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110519061436c565b60405180910390fd5b86600781905550856008819055508460098190555082600c8190555081600b8190555083600a819055507f95617e149b678679d65360792e6610c8fc9add72efd72fc3c8d94792801ca5c98787878787876040516110bd96959493929190614401565b60405180910390a150505050505050565b60006012905090565b6110e033612187565b61111f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611116906141ec565b60405180910390fd5b611133428261112e91906144dd565b61267d565b50565b61113f33612187565b61117e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611175906141ec565b60405180910390fd5b60028111156111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b9906142ec565b60405180910390fd5b80600e819055507fdfcf82c64ef2a938975f4ad1599e559af165a244802754595fcbffcf5ffdd0d9816040516111f8919061438c565b60405180910390a150565b6000611297338484600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461129291906144dd565b61221e565b6001905092915050565b6112aa33612187565b6112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e0906141ec565b60405180910390fd5b6112f360016126ce565b565b60006103e860135460065461130a91906146d5565b6113149190614533565b60016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411905090565b61138533612187565b6113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb906141ec565b60405180910390fd5b6032811115611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff9061416c565b60405180910390fd5b80600d819055507fd1db3c8f76ced548252ac593ebef6129c122ab13cce5b9367eb4421cebe388558160405161143e919061438c565b60405180910390a150565b60075481565b61145833612187565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e906141ec565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061430c565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601460009054906101000a900460ff1681565b600e5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff16611604611909565b73ffffffffffffffffffffffffffffffffffffffff161461165a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116519061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61174733612187565b611786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177d906141ec565b60405180910390fd5b6000601554146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c2906142cc565b60405180910390fd5b426015819055507f2cb945e0498987ef06dbd68025b0bc276116c63345296379c28a8e8f09b47dc160405160405180910390a1565b60095481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186057600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118ad33612187565b6118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906141ec565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f5065506537000000000000000000000000000000000000000000000000000000815250905090565b601760009054906101000a900460ff1681565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3e9061434c565b60405180910390fd5b611a5d33858584611a58919061472f565b61221e565b600191505092915050565b611a7133612187565b611ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa7906141ec565b60405180910390fd5b6001601760006101000a81548160ff021916908315150217905550565b6000611ada3384846123e9565b6001905092915050565b611aed33612187565b611b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b23906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b929061432c565b60405180910390fd5b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f9a547f2adf55e10d7297ec9f54496d4044ad440b7cd8f5b5d5700778377d71d38282604051611c23929190613ffc565b60405180910390a15050565b60155481565b611c3e33612187565b611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c74906141ec565b60405180910390fd5b6103e8811115611c8c57600080fd5b8060138190555050565b600b5481565b6000601654421015611cbd5742601654611cb6919061472f565b9050611cc2565b600090505b90565b60006001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546006546012600a611d1a91906145b7565b6276adf1611d2891906146d5565b611d32919061472f565b611d3c91906144dd565b905090565b60085481565b611d5033612187565b611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d86906141ec565b60405180910390fd5b600f811115611d9d57600080fd5b8060128190555050565b60056020528060005260406000206000915054906101000a900460ff1681565b60046020528060005260406000206000915054906101000a900460ff1681565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e9733612187565b611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd906141ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c9061432c565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fa22b25479919d4ac678f064a05daa1ee9c0adc3b8198942ea45255e364e04ed48282604051611fcd929190613ffc565b60405180910390a15050565b60125481565b3373ffffffffffffffffffffffffffffffffffffffff16611ffe611909565b73ffffffffffffffffffffffffffffffffffffffff1614612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204b9061428c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bb9061414c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5481565b6000612191611909565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806122175750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561228e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122859061418c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f59061424c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123dc919061438c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612450906140ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c0906141ac565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061256a5750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561257f5761257a83838361299b565b612678565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561262657600060155411612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d906142ac565b60405180910390fd5b612621838383612b39565b612677565b60006015541161266b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612662906142ac565b60405180910390fd5b612676838383612f55565b5b5b505050565b601654811161268b57600080fd5b806016819055507f8ff9dc93846a022986f54e8f219a1fa780225726858e39e850da826852b4042e6016546040516126c3919061438c565b60405180910390a150565b6001601160146101000a81548160ff0219169083151502179055506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600c54600b5461273f91906144dd565b905060006103e860125460016000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b591906146d5565b6127bf9190614533565b905060008214156127d25750505061297d565b831561281f57600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612830565b8083101561282f5750505061297d565b5b600061283a6112f5565b61285c5782600b548361284d91906146d5565b6128579190614533565b61285f565b60005b90506000818361286f919061472f565b905060006002836128809190614533565b90506000828261289091906144dd565b905060004790506128a08261347c565b600081476128ae919061472f565b905060008611156128e05760008385836128c891906146d5565b6128d29190614533565b90506128de85826136d1565b505b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161292890613fcc565b60006040518083038185875af1925050503d8060008114612965576040519150601f19603f3d011682016040523d82523d6000602084013e61296a565b606091505b5050905060019050505050505050505050505b6000601160146101000a81548160ff02191690831515021790555050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a199061412c565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a71919061472f565b9250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ac791906144dd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b2b919061438c565b60405180910390a350505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb79061412c565b60405180910390fd5b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060008115612ca457600060b4905080601554612c7e91906144dd565b421015612c9857612c91816103e76137be565b9150612c9e565b60085491505b50612ceb565b8215612ce4576000603c905080601554612cbe91906144dd565b421015612cd857612cd1816103e76137be565b9150612cde565b60075491505b50612cea565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614158015612d565750601460009054906101000a900460ff16155b8015612d6f5750601160149054906101000a900460ff16155b15612d7f57612d7e60006126ce565b5b6000612d8e8683600a54613808565b90506000612dac8784600b54600c54612da791906144dd565b613808565b905060008183612dbc91906144dd565b88612dc7919061472f565b905087600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e18919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e6e91906144dd565b925050819055508260066000828254612e87919061472f565b9250508190555080600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612edd91906144dd565b925050819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f41919061438c565b60405180910390a350505050505050505050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082821015613020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130179061412c565b60405180910390fd5b82600e548361302f9190614533565b1015613070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130679061426c565b60405180910390fd5b600d546012600a61308191906145b7565b6276adf161308f91906146d5565b6130999190614533565b83826130a591906144dd565b11156130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd9061422c565b60405180910390fd5b6000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600081156131ca57600060b49050806015546131a491906144dd565b4210156131be576131b7816103e76137be565b91506131c4565b60085491505b50613211565b821561320a576000603c9050806015546131e491906144dd565b4210156131fe576131f7816103e76137be565b9150613204565b60075491505b50613210565b60095490505b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415801561327c5750601460009054906101000a900460ff16155b80156132955750601160149054906101000a900460ff16155b156132a5576132a460006126ce565b5b60006132b48783600a54613808565b905060006132d28884600b54600c546132cd91906144dd565b613808565b9050600081836132e291906144dd565b896132ed919061472f565b905088600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461333e919061472f565b9250508190555081600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461339491906144dd565b9250508190555082600660008282546133ad919061472f565b9250508190555080600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461340391906144dd565b925050819055508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613467919061438c565b60405180910390a35050505050505050505050565b6134a930601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361221e565b6000600267ffffffffffffffff8111156134c6576134c561488a565b5b6040519080825280602002602001820160405280156134f45781602001602082028036833780820191505090505b509050308160008151811061350c5761350b61485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156135ae57600080fd5b505afa1580156135c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e691906138ed565b816001815181106135fa576135f961485b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136989594939291906143a7565b600060405180830381600087803b1580156136b257600080fd5b505af19250505080156136c3575060015b6136cc576136cd565b5b5050565b6136fe30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461221e565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016137659695949392919061404e565b6060604051808303818588803b15801561377e57600080fd5b505af1158015613792573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137b79190613ae1565b5050505050565b600080601554426137cf919061472f565b905083816032856137e0919061472f565b6137ea91906146d5565b6137f49190614533565b836137ff919061472f565b91505092915050565b60006103e88061381891906146d5565b82848661382591906146d5565b61382f91906146d5565b6138399190614533565b90509392505050565b60008135905061385181614cfa565b92915050565b60008151905061386681614cfa565b92915050565b60008135905061387b81614d11565b92915050565b60008151905061389081614d11565b92915050565b6000813590506138a581614d28565b92915050565b6000815190506138ba81614d28565b92915050565b6000602082840312156138d6576138d56148b9565b5b60006138e484828501613842565b91505092915050565b600060208284031215613903576139026148b9565b5b600061391184828501613857565b91505092915050565b60008060408385031215613931576139306148b9565b5b600061393f85828601613842565b925050602061395085828601613842565b9150509250929050565b600080600060608486031215613973576139726148b9565b5b600061398186828701613842565b935050602061399286828701613842565b92505060406139a386828701613896565b9150509250925092565b600080604083850312156139c4576139c36148b9565b5b60006139d285828601613842565b92505060206139e38582860161386c565b9150509250929050565b60008060408385031215613a0457613a036148b9565b5b6000613a1285828601613842565b9250506020613a2385828601613896565b9150509250929050565b600060208284031215613a4357613a426148b9565b5b6000613a518482850161386c565b91505092915050565b600060208284031215613a7057613a6f6148b9565b5b6000613a7e84828501613881565b91505092915050565b600060208284031215613a9d57613a9c6148b9565b5b6000613aab84828501613896565b91505092915050565b600060208284031215613aca57613ac96148b9565b5b6000613ad8848285016138ab565b91505092915050565b600080600060608486031215613afa57613af96148b9565b5b6000613b08868287016138ab565b9350506020613b19868287016138ab565b9250506040613b2a868287016138ab565b9150509250925092565b60008060008060008060c08789031215613b5157613b506148b9565b5b6000613b5f89828a01613896565b9650506020613b7089828a01613896565b9550506040613b8189828a01613896565b9450506060613b9289828a01613896565b9350506080613ba389828a01613896565b92505060a0613bb489828a01613896565b9150509295509295509295565b6000613bcd8383613bd9565b60208301905092915050565b613be281614763565b82525050565b613bf181614763565b82525050565b6000613c028261448d565b613c0c81856144b0565b9350613c178361447d565b8060005b83811015613c48578151613c2f8882613bc1565b9750613c3a836144a3565b925050600181019050613c1b565b5085935050505092915050565b613c5e81614775565b82525050565b613c6d816147b8565b82525050565b6000613c7e82614498565b613c8881856144cc565b9350613c988185602086016147ca565b613ca1816148be565b840191505092915050565b6000613cb96012836144cc565b9150613cc4826148dc565b602082019050919050565b6000613cdc6010836144cc565b9150613ce782614905565b602082019050919050565b6000613cff6018836144cc565b9150613d0a8261492e565b602082019050919050565b6000613d226026836144cc565b9150613d2d82614957565b604082019050919050565b6000613d456031836144cc565b9150613d50826149a6565b604082019050919050565b6000613d686011836144cc565b9150613d73826149f5565b602082019050919050565b6000613d8b6010836144cc565b9150613d9682614a1e565b602082019050919050565b6000613dae6014836144cc565b9150613db982614a47565b602082019050919050565b6000613dd16018836144cc565b9150613ddc82614a70565b602082019050919050565b6000613df46012836144cc565b9150613dff82614a99565b602082019050919050565b6000613e17602f836144cc565b9150613e2282614ac2565b604082019050919050565b6000613e3a600f836144cc565b9150613e4582614b11565b602082019050919050565b6000613e5d601f836144cc565b9150613e6882614b3a565b602082019050919050565b6000613e806020836144cc565b9150613e8b82614b63565b602082019050919050565b6000613ea36017836144cc565b9150613eae82614b8c565b602082019050919050565b6000613ec6600f836144cc565b9150613ed182614bb5565b602082019050919050565b6000613ee96000836144c1565b9150613ef482614bde565b600082019050919050565b6000613f0c602d836144cc565b9150613f1782614be1565b604082019050919050565b6000613f2f6014836144cc565b9150613f3a82614c30565b602082019050919050565b6000613f52601a836144cc565b9150613f5d82614c59565b602082019050919050565b6000613f75600c836144cc565b9150613f8082614c82565b602082019050919050565b6000613f986021836144cc565b9150613fa382614cab565b604082019050919050565b613fb7816147a1565b82525050565b613fc6816147ab565b82525050565b6000613fd782613edc565b9150819050919050565b6000602082019050613ff66000830184613be8565b92915050565b60006040820190506140116000830185613be8565b61401e6020830184613c55565b9392505050565b600060408201905061403a6000830185613be8565b6140476020830184613fae565b9392505050565b600060c0820190506140636000830189613be8565b6140706020830188613fae565b61407d6040830187613c64565b61408a6060830186613c64565b6140976080830185613be8565b6140a460a0830184613fae565b979650505050505050565b60006020820190506140c46000830184613c55565b92915050565b600060208201905081810360008301526140e48184613c73565b905092915050565b6000602082019050818103600083015261410581613cac565b9050919050565b6000602082019050818103600083015261412581613ccf565b9050919050565b6000602082019050818103600083015261414581613cf2565b9050919050565b6000602082019050818103600083015261416581613d15565b9050919050565b6000602082019050818103600083015261418581613d38565b9050919050565b600060208201905081810360008301526141a581613d5b565b9050919050565b600060208201905081810360008301526141c581613d7e565b9050919050565b600060208201905081810360008301526141e581613da1565b9050919050565b6000602082019050818103600083015261420581613dc4565b9050919050565b6000602082019050818103600083015261422581613de7565b9050919050565b6000602082019050818103600083015261424581613e0a565b9050919050565b6000602082019050818103600083015261426581613e2d565b9050919050565b6000602082019050818103600083015261428581613e50565b9050919050565b600060208201905081810360008301526142a581613e73565b9050919050565b600060208201905081810360008301526142c581613e96565b9050919050565b600060208201905081810360008301526142e581613eb9565b9050919050565b6000602082019050818103600083015261430581613eff565b9050919050565b6000602082019050818103600083015261432581613f22565b9050919050565b6000602082019050818103600083015261434581613f45565b9050919050565b6000602082019050818103600083015261436581613f68565b9050919050565b6000602082019050818103600083015261438581613f8b565b9050919050565b60006020820190506143a16000830184613fae565b92915050565b600060a0820190506143bc6000830188613fae565b6143c96020830187613c64565b81810360408301526143db8186613bf7565b90506143ea6060830185613be8565b6143f76080830184613fae565b9695505050505050565b600060c0820190506144166000830189613fae565b6144236020830188613fae565b6144306040830187613fae565b61443d6060830186613fae565b61444a6080830185613fae565b61445760a0830184613fae565b979650505050505050565b60006020820190506144776000830184613fbd565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006144e8826147a1565b91506144f3836147a1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614528576145276147fd565b5b828201905092915050565b600061453e826147a1565b9150614549836147a1565b9250826145595761455861482c565b5b828204905092915050565b6000808291508390505b60018511156145ae5780860481111561458a576145896147fd565b5b60018516156145995780820291505b80810290506145a7856148cf565b945061456e565b94509492505050565b60006145c2826147a1565b91506145cd836147ab565b92506145fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614602565b905092915050565b60008261461257600190506146ce565b8161462057600090506146ce565b816001811461463657600281146146405761466f565b60019150506146ce565b60ff841115614652576146516147fd565b5b8360020a915084821115614669576146686147fd565b5b506146ce565b5060208310610133831016604e8410600b84101617156146a45782820a90508381111561469f5761469e6147fd565b5b6146ce565b6146b18484846001614564565b925090508184048111156146c8576146c76147fd565b5b81810290505b9392505050565b60006146e0826147a1565b91506146eb836147a1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614724576147236147fd565b5b828202905092915050565b600061473a826147a1565b9150614745836147a1565b925082821015614758576147576147fd565b5b828203905092915050565b600061476e82614781565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006147c3826147a1565b9050919050565b60005b838110156147e85780820151818401526020810190506147cd565b838111156147f7576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f5472616e736665722066726f6d207a65726f0000000000000000000000000000600082015250565b7f4e6f742079657420756e6c6f636b656400000000000000000000000000000000600082015250565b7f5472616e7366657220657863656564732062616c616e63650000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c6574202063616e277420626520756e646572203225206f6660008201527f2074686520746f74616c20737570706c79000000000000000000000000000000602082015250565b7f417070726f76652066726f6d207a65726f000000000000000000000000000000600082015250565b7f5472616e7366657220746f207a65726f00000000000000000000000000000000600082015250565b7f5472616e73666572203e20616c6c6f77616e6365000000000000000000000000600082015250565b7f43616c6c6572206e6f74205465616d206f72204f776e65720000000000000000600082015250565b7f5461782065786365656473206d61785461780000000000000000000000000000600082015250565b7f57616c6c657420636f6e7461696e206d6f7265207468616e206365727461696e60008201527f202520546f74616c20537570706c790000000000000000000000000000000000602082015250565b7f417070726f766520746f207a65726f0000000000000000000000000000000000600082015250565b7f5472616e73666572206578636565647320617574686f726973652073656c6c00600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74726164696e67206e6f742079657420656e61626c6564000000000000000000600082015250565b7f416c72656164794c61756e636865640000000000000000000000000000000000600082015250565b50565b7f44756d70206d6561737572652063616e277420626520756e646572203530252060008201527f6f66207468652077616c6c657400000000000000000000000000000000000000602082015250565b7f63616e2774206368616e676520756e6973776170000000000000000000000000600082015250565b7f63616e277420496e636c7564652074686520636f6e7472616374000000000000600082015250565b7f3c3020616c6c6f77616e63650000000000000000000000000000000000000000600082015250565b7f546178657320646f6e27742061646420757020746f2064656e6f6d696e61746f60008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b614d0381614763565b8114614d0e57600080fd5b50565b614d1a81614775565b8114614d2557600080fd5b50565b614d31816147a1565b8114614d3c57600080fd5b5056fea2646970667358221220d41a800fa5d6bcf856059ae4a0908c86fa4492e020bb2020121aabed7a43d7a564736f6c63430008070033