6080604052604051806080016040528060405180606001604052806029815260200161560b602991398152602001610dec815260200162046cd08152602001615dfe81525060085f820151815f0190816100599190610844565b5060208201518160010155604082015181600201556060820151816003015550505f600c5f6101000a81548160ff0219169083151502179055505f600f556040518060600160405280603581526020016155d660359139601090816100be9190610844565b506040518060800160405280733762ba161a7adba9ee84a8cafffe57aa2e13347f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001735ca6aae74e45bd7271aa9eede684a047c77cab5373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173ab8483f64d9c6d1ecf9b849ae677dd3315835cb273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001734b20993bc481177ec7e8f571cecae8a9e22c02db73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525060139060046101f09291906104e1565b5060405180604001604052807327a503629a5354982735d5706286fb4731418ada73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020017378731d3ca6b7e34ac0f824c42a7cc18a495cabab73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152506014906002610296929190610568565b50610af06015553480156102a8575f80fd5b5060405161563438038061563483398181016040528101906102ca9190610971565b336040518060400160405280601381526020017f5265616c576f726c644173736574546f6b656e000000000000000000000000008152506040518060400160405280600481526020017f5257415400000000000000000000000000000000000000000000000000000000815250815f90816103459190610844565b5080600190816103559190610844565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036103c8575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103bf91906109ab565b60405180910390fd5b6103d78161041e60201b60201c565b508060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506109c4565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054828255905f5260205f20908101928215610557579160200282015b82811115610556578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906104ff565b5b50905061056491906105ef565b5090565b828054828255905f5260205f209081019282156105de579160200282015b828111156105dd578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190610586565b5b5090506105eb91906105ef565b5090565b5b80821115610606575f815f9055506001016105f0565b5090565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061068557607f821691505b60208210810361069857610697610641565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026106fa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106bf565b61070486836106bf565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61074861074361073e8461071c565b610725565b61071c565b9050919050565b5f819050919050565b6107618361072e565b61077561076d8261074f565b8484546106cb565b825550505050565b5f90565b61078961077d565b610794818484610758565b505050565b5b818110156107b7576107ac5f82610781565b60018101905061079a565b5050565b601f8211156107fc576107cd8161069e565b6107d6846106b0565b810160208510156107e5578190505b6107f96107f1856106b0565b830182610799565b50505b505050565b5f82821c905092915050565b5f61081c5f1984600802610801565b1980831691505092915050565b5f610834838361080d565b9150826002028217905092915050565b61084d8261060a565b67ffffffffffffffff81111561086657610865610614565b5b610870825461066e565b61087b8282856107bb565b5f60209050601f8311600181146108ac575f841561089a578287015190505b6108a48582610829565b86555061090b565b601f1984166108ba8661069e565b5f5b828110156108e1578489015182556001820191506020850194506020810190506108bc565b868310156108fe57848901516108fa601f89168261080d565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61094082610917565b9050919050565b61095081610936565b811461095a575f80fd5b50565b5f8151905061096b81610947565b92915050565b5f6020828403121561098657610985610913565b5b5f6109938482850161095d565b91505092915050565b6109a581610936565b82525050565b5f6020820190506109be5f83018461099c565b92915050565b614c05806109d15f395ff3fe608060405234801561000f575f80fd5b506004361061025c575f3560e01c806370a0823111610144578063b534b5b7116100c1578063cee2a9cf11610085578063cee2a9cf1461073d578063d1b02ba71461076d578063d81bc2711461078c578063e985e9c5146107ad578063f2fde38b146107dd578063fe575a87146107f95761025c565b8063b534b5b714610699578063b88d4fde146106b7578063ba4e5c49146106d3578063c87b56dd14610703578063c9c2783f146107335761025c565b806395d89b411161010857806395d89b41146105e1578063a22cb465146105ff578063a7a8c3591461061b578063ad9ab8571461064b578063b2f5a54c1461067b5761025c565b806370a082311461054d578063715018a61461057d5780637e1c0c09146105875780637ff9b596146105a55780638da5cb5b146105c35761025c565b806323b872dd116101dd57806342842e0e116101a157806342842e0e1461047b578063486fc7e81461049757806354e35ba2146104c75780636352211e146104e3578063676c0d771461051357806369bb4dc21461052f5761025c565b806323b872dd146103c45780633610724e146103e05780633af32abf146103fc5780633c130d901461042c5780633feb5f2b1461044a5761025c565b80631120fd03116102245780631120fd031461031857806311eac85514610349578063176fd3f014610367578063192ddae5146103885780631f62f309146103a65761025c565b806301ffc9a71461026057806306a1c6a21461029057806306fdde03146102ae578063081812fc146102cc578063095ea7b3146102fc575b5f80fd5b61027a600480360381019061027591906138da565b610829565b604051610287919061391f565b60405180910390f35b610298610889565b6040516102a59190613977565b60405180910390f35b6102b66108a1565b6040516102c39190613a00565b60405180910390f35b6102e660048036038101906102e19190613a53565b610930565b6040516102f39190613977565b60405180910390f35b61031660048036038101906103119190613aa8565b61094b565b005b610332600480360381019061032d9190613a53565b610961565b604051610340929190613af5565b60405180910390f35b6103516109af565b60405161035e9190613b77565b60405180910390f35b61036f6109d4565b60405161037f9493929190613b90565b60405180910390f35b610390610a77565b60405161039d919061391f565b60405180910390f35b6103ae610a89565b6040516103bb9190613bda565b60405180910390f35b6103de60048036038101906103d99190613bf3565b610a8f565b005b6103fa60048036038101906103f59190613a53565b610b8e565b005b61041660048036038101906104119190613c43565b61146f565b604051610423919061391f565b60405180910390f35b610434611511565b6040516104419190613a00565b60405180910390f35b610464600480360381019061045f9190613a53565b61159d565b604051610472929190613af5565b60405180910390f35b61049560048036038101906104909190613bf3565b6115eb565b005b6104b160048036038101906104ac9190613c43565b61160a565b6040516104be9190613bda565b60405180910390f35b6104e160048036038101906104dc9190613c6e565b61161f565b005b6104fd60048036038101906104f89190613a53565b6117ad565b60405161050a9190613977565b60405180910390f35b61052d60048036038101906105289190613a53565b6117be565b005b61053761181e565b6040516105449190613bda565b60405180910390f35b61056760048036038101906105629190613c43565b6118bc565b6040516105749190613bda565b60405180910390f35b610585611972565b005b61058f611985565b60405161059c9190613bda565b60405180910390f35b6105ad61198b565b6040516105ba9190613bda565b60405180910390f35b6105cb611991565b6040516105d89190613977565b60405180910390f35b6105e96119b9565b6040516105f69190613a00565b60405180910390f35b61061960048036038101906106149190613cd6565b611a49565b005b61063560048036038101906106309190613a53565b611a5f565b6040516106429190613977565b60405180910390f35b61066560048036038101906106609190613a53565b611a9a565b604051610672919061391f565b60405180910390f35b610683611ab7565b6040516106909190613e07565b60405180910390f35b6106a1611b71565b6040516106ae9190613bda565b60405180910390f35b6106d160048036038101906106cc9190613f53565b611b77565b005b6106ed60048036038101906106e89190613a53565b611b94565b6040516106fa9190613977565b60405180910390f35b61071d60048036038101906107189190613a53565b611bcf565b60405161072a9190613a00565b60405180910390f35b61073b611cda565b005b61075760048036038101906107529190613c43565b612132565b604051610764919061391f565b60405180910390f35b6107756121da565b604051610783929190614123565b60405180910390f35b6107946124b4565b6040516107a49493929190613b90565b60405180910390f35b6107c760048036038101906107c29190614158565b612567565b6040516107d4919061391f565b60405180910390f35b6107f760048036038101906107f29190613c43565b6125f5565b005b610813600480360381019061080e9190613c43565b612679565b604051610820919061391f565b60405180910390f35b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061088257506108818261271b565b5b9050919050565b7305b9e9514fce6b5d903c7e763429b1d497de6b3b81565b60605f80546108af906141c3565b80601f01602080910402602001604051908101604052809291908181526020018280546108db906141c3565b80156109265780601f106108fd57610100808354040283529160200191610926565b820191905f5260205f20905b81548152906001019060200180831161090957829003601f168201915b5050505050905090565b5f61093a826127fc565b5061094482612882565b9050919050565b61095d82826109586128bb565b6128c2565b5050565b60168181548110610970575f80fd5b905f5260205f2090600202015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6008805f0180546109e4906141c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a10906141c3565b8015610a5b5780601f10610a3257610100808354040283529160200191610a5b565b820191905f5260205f20905b815481529060010190602001808311610a3e57829003601f168201915b5050505050908060010154908060020154908060030154905084565b600c5f9054906101000a900460ff1681565b60155481565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aff575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610af69190613977565b60405180910390fd5b5f610b128383610b0d6128bb565b6128d4565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b88578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610b7f939291906141f3565b60405180910390fd5b50505050565b600c5f9054906101000a900460ff16610bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd390614272565b60405180910390fd5b5f81118015610bec575060088111155b610c2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2290614300565b60405180910390fd5b610c3361181e565b811115610c75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6c90614368565b60405180910390fd5b610c7e3361146f565b610cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb4906143d0565b60405180910390fd5b610cc633612679565b15610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd90614438565b60405180910390fd5b5f600d5482610d159190614483565b90508060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610d729190613977565b602060405180830381865afa158015610d8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db191906144d8565b1015610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de99061454d565b60405180910390fd5b8060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401610e4f92919061456b565b602060405180830381865afa158015610e6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8e91906144d8565b1015610ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec6906145dc565b60405180910390fd5b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610f2d939291906145fa565b6020604051808303815f875af1158015610f49573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f6d9190614643565b505f80600190505b600e548111158015610f8657508382105b156112305760115f8281526020019081526020015f205f9054906101000a900460ff1661121d57610fbf610fb8611991565b3383612adf565b600160115f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550600160175f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611035919061466e565b925050819055505f805b601880549050811015611110573373ffffffffffffffffffffffffffffffffffffffff1660188281548110611077576110766146a1565b5b905f5260205f2090600202015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611103576001601882815481106110d6576110d56146a1565b5b905f5260205f2090600202016001015f8282546110f3919061466e565b9250508190555060019150611110565b808060010191505061103f565b50806111bb57601860405180604001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016001815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550505b82806111c6906146ce565b9350503373ffffffffffffffffffffffffffffffffffffffff167f3ceffd410054fdaed44f598ff5c1fb450658778e2241892da4aa646979dee61783600d54604051611213929190614715565b60405180910390a2505b8080611228906146ce565b915050610f75565b505f60646002846112419190614483565b61124b9190614769565b90505f818461125a9190614799565b905060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb7305b9e9514fce6b5d903c7e763429b1d497de6b3b846040518363ffffffff1660e01b81526004016112cc929190613af5565b6020604051808303815f875af11580156112e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130c9190614643565b507305b9e9514fce6b5d903c7e763429b1d497de6b3b73ffffffffffffffffffffffffffffffffffffffff167f885e6f6235626292940f78c947a331f4c7c1d7f50a48b38092cf546bc9c7907a836040516113679190613bda565b60405180910390a260125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6113b4611991565b836040518363ffffffff1660e01b81526004016113d2929190613af5565b6020604051808303815f875af11580156113ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114129190614643565b5061141b611991565b73ffffffffffffffffffffffffffffffffffffffff167f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770826040516114609190613bda565b60405180910390a25050505050565b5f805f90505b601380549050811015611507578273ffffffffffffffffffffffffffffffffffffffff16601382815481106114ad576114ac6146a1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114fa57600191505061150c565b8080600101915050611475565b505f90505b919050565b6010805461151e906141c3565b80601f016020809104026020016040519081016040528092919081815260200182805461154a906141c3565b80156115955780601f1061156c57610100808354040283529160200191611595565b820191905f5260205f20905b81548152906001019060200180831161157857829003601f168201915b505050505081565b601881815481106115ac575f80fd5b905f5260205f2090600202015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b61160583838360405180602001604052805f815250611b77565b505050565b6017602052805f5260405f205f915090505481565b611627612c47565b600c5f9054906101000a900460ff1615611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d90614816565b60405180910390fd5b81600e81905550620f42408161168c9190614483565b600d819055506001600c5f6101000a81548160ff0219169083151502179055505f600190505b828111611768576116c33382612cce565b61175581601080546116d4906141c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611700906141c3565b801561174b5780601f106117225761010080835404028352916020019161174b565b820191905f5260205f20905b81548152906001019060200180831161172e57829003601f168201915b5050505050612dc1565b8080611760906146ce565b9150506116b2565b5081600f819055507f08a3ad1d54f9e72ce7885341976027e04c0c26bddba427e8768f04879f82dc6e82826040516117a1929190614715565b60405180910390a15050565b5f6117b7826127fc565b9050919050565b6117c6612c47565b600c5f9054906101000a900460ff16611814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180b90614272565b60405180910390fd5b80600d8190555050565b5f805f90505f600190505b600e5481116118b4575f73ffffffffffffffffffffffffffffffffffffffff16611852826117ad565b73ffffffffffffffffffffffffffffffffffffffff16148061188e575060115f8281526020019081526020015f205f9054906101000a900460ff165b6118a157818061189d906146ce565b9250505b80806118ac906146ce565b915050611829565b508091505090565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361192d575f6040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016119249190613977565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61197a612c47565b6119835f612e1b565b565b600e5481565b600d5481565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546119c8906141c3565b80601f01602080910402602001604051908101604052809291908181526020018280546119f4906141c3565b8015611a3f5780601f10611a1657610100808354040283529160200191611a3f565b820191905f5260205f20905b815481529060010190602001808311611a2257829003601f168201915b5050505050905090565b611a5b611a546128bb565b8383612ede565b5050565b60148181548110611a6e575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6011602052805f5260405f205f915054906101000a900460ff1681565b60606018805480602002602001604051908101604052809291908181526020015f905b82821015611b68578382905f5260205f2090600202016040518060400160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152505081526020019060010190611ada565b50505050905090565b600f5481565b611b82848484610a8f565b611b8e84848484613047565b50505050565b60138181548110611ba3575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060611bda826127fc565b505f60065f8481526020019081526020015f208054611bf8906141c3565b80601f0160208091040260200160405190810160405280929190818152602001828054611c24906141c3565b8015611c6f5780601f10611c4657610100808354040283529160200191611c6f565b820191905f5260205f20905b815481529060010190602001808311611c5257829003601f168201915b505050505090505f611c7f6131f9565b90505f815103611c93578192505050611cd5565b5f82511115611cc7578082604051602001611caf92919061486e565b60405160208183030381529060405292505050611cd5565b611cd08461320f565b925050505b919050565b611ce2612c47565b600c5f9054906101000a900460ff16611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2790614272565b60405180910390fd5b5f6103e86005601554611d439190614483565b611d4d9190614769565b90505f80611d59611ab7565b90505f5b8151811015611db4575f828281518110611d7a57611d796146a1565b5b60200260200101516020015190505f8186611d959190614483565b90508085611da3919061466e565b945050508080600101915050611d5d565b508160125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401611e1292919061456b565b602060405180830381865afa158015611e2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5191906144d8565b1015611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e89906145dc565b60405180910390fd5b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401611ef0939291906145fa565b6020604051808303815f875af1158015611f0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f309190614643565b505f5b815181101561212c575f828281518110611f5057611f4f6146a1565b5b60200260200101515f015190505f838381518110611f7157611f706146a1565b5b60200260200101516020015190505f8187611f8c9190614483565b905060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401611fea929190613af5565b6020604051808303815f875af1158015612006573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061202a9190614643565b50601660405180604001604052808573ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015550508273ffffffffffffffffffffffffffffffffffffffff167ffbfb5c3838edba49f86bf92ac506367c2bb6d474fa7cbadfd4f5618c9c665a48826040516121149190613bda565b60405180910390a25050508080600101915050611f33565b50505050565b5f805f90505b6018805490508110156121d0578273ffffffffffffffffffffffffffffffffffffffff16601882815481106121705761216f6146a1565b5b905f5260205f2090600202015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036121c35760019150506121d5565b8080600101915050612138565b505f90505b919050565b6060805f600e5467ffffffffffffffff8111156121fa576121f9613e2f565b5b6040519080825280602002602001820160405280156122285781602001602082028036833780820191505090505b5090505f600e5467ffffffffffffffff81111561224857612247613e2f565b5b6040519080825280602002602001820160405280156122765781602001602082028036833780820191505090505b5090505f80600190505b600e54811161235c575f73ffffffffffffffffffffffffffffffffffffffff166122a9826117ad565b73ffffffffffffffffffffffffffffffffffffffff1614612349576122cd816117ad565b8483815181106122e0576122df6146a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508083838151811061232e5761232d6146a1565b5b6020026020010181815250508180612345906146ce565b9250505b8080612354906146ce565b915050612280565b508067ffffffffffffffff81111561237757612376613e2f565b5b6040519080825280602002602001820160405280156123a55781602001602082028036833780820191505090505b5094508067ffffffffffffffff8111156123c2576123c1613e2f565b5b6040519080825280602002602001820160405280156123f05781602001602082028036833780820191505090505b5093505f5b818110156124ac578381815181106124105761240f6146a1565b5b602002602001015186828151811061242b5761242a6146a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828181518110612478576124776146a1565b5b6020026020010151858281518110612493576124926146a1565b5b60200260200101818152505080806001019150506123f5565b505050509091565b60605f805f60085f016008600101546008600201546008600301548380546124db906141c3565b80601f0160208091040260200160405190810160405280929190818152602001828054612507906141c3565b80156125525780601f1061252957610100808354040283529160200191612552565b820191905f5260205f20905b81548152906001019060200180831161253557829003601f168201915b50505050509350935093509350935090919293565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b6125fd612c47565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361266d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016126649190613977565b60405180910390fd5b61267681612e1b565b50565b5f805f90505b601480549050811015612711578273ffffffffffffffffffffffffffffffffffffffff16601482815481106126b7576126b66146a1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612704576001915050612716565b808060010191505061267f565b505f90505b919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127e557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127f557506127f482613275565b5b9050919050565b5f80612807836132de565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361287957826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016128709190613bda565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b6128cf8383836001613317565b505050565b5f806128df846132de565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129205761291f8184866134d6565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146129ab5761295f5f855f80613317565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612a2a57600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b4f575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612b469190613977565b60405180910390fd5b5f612b5b83835f6128d4565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bcd57816040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612bc49190613bda565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612c41578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401612c38939291906141f3565b60405180910390fd5b50505050565b612c4f6128bb565b73ffffffffffffffffffffffffffffffffffffffff16612c6d611991565b73ffffffffffffffffffffffffffffffffffffffff1614612ccc57612c906128bb565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401612cc39190613977565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d3e575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612d359190613977565b60405180910390fd5b5f612d4a83835f6128d4565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612dbc575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401612db39190613977565b60405180910390fd5b505050565b8060065f8481526020019081526020015f209081612ddf9190614a25565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce782604051612e0f9190613bda565b60405180910390a15050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f4e57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401612f459190613977565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161303a919061391f565b60405180910390a3505050565b5f8373ffffffffffffffffffffffffffffffffffffffff163b11156131f3578273ffffffffffffffffffffffffffffffffffffffff1663150b7a0261308a6128bb565b8685856040518563ffffffff1660e01b81526004016130ac9493929190614b46565b6020604051808303815f875af19250505080156130e757506040513d601f19601f820116820180604052508101906130e49190614ba4565b60015b613168573d805f8114613115576040519150601f19603f3d011682016040523d82523d5f602084013e61311a565b606091505b505f81510361316057836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016131579190613977565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146131f157836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016131e89190613977565b60405180910390fd5b505b50505050565b606060405180602001604052805f815250905090565b606061321a826127fc565b505f6132246131f9565b90505f8151116132425760405180602001604052805f81525061326d565b8061324c84613599565b60405160200161325d92919061486e565b6040516020818303038152906040525b915050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061334f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613481575f61335e846127fc565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156133c857508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156133db57506133d98184612567565b155b1561341d57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016134149190613977565b60405180910390fd5b811561347f57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6134e1838383613663565b613594575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361355557806040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161354c9190613bda565b60405180910390fd5b81816040517f177e802f00000000000000000000000000000000000000000000000000000000815260040161358b929190613af5565b60405180910390fd5b505050565b60605f60016135a784613723565b0190505f8167ffffffffffffffff8111156135c5576135c4613e2f565b5b6040519080825280601f01601f1916602001820160405280156135f75781602001600182028036833780820191505090505b5090505f82602001820190505b600115613658578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161364d5761364c61473c565b5b0494505f8503613604575b819350505050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561371a57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806136db57506136da8484612567565b5b8061371957508273ffffffffffffffffffffffffffffffffffffffff1661370183612882565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061377f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816137755761377461473c565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106137bc576d04ee2d6d415b85acef810000000083816137b2576137b161473c565b5b0492506020810190505b662386f26fc1000083106137eb57662386f26fc1000083816137e1576137e061473c565b5b0492506010810190505b6305f5e1008310613814576305f5e100838161380a5761380961473c565b5b0492506008810190505b612710831061383957612710838161382f5761382e61473c565b5b0492506004810190505b6064831061385c57606483816138525761385161473c565b5b0492506002810190505b600a831061386b576001810190505b80915050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6138b981613885565b81146138c3575f80fd5b50565b5f813590506138d4816138b0565b92915050565b5f602082840312156138ef576138ee61387d565b5b5f6138fc848285016138c6565b91505092915050565b5f8115159050919050565b61391981613905565b82525050565b5f6020820190506139325f830184613910565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61396182613938565b9050919050565b61397181613957565b82525050565b5f60208201905061398a5f830184613968565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6139d282613990565b6139dc818561399a565b93506139ec8185602086016139aa565b6139f5816139b8565b840191505092915050565b5f6020820190508181035f830152613a1881846139c8565b905092915050565b5f819050919050565b613a3281613a20565b8114613a3c575f80fd5b50565b5f81359050613a4d81613a29565b92915050565b5f60208284031215613a6857613a6761387d565b5b5f613a7584828501613a3f565b91505092915050565b613a8781613957565b8114613a91575f80fd5b50565b5f81359050613aa281613a7e565b92915050565b5f8060408385031215613abe57613abd61387d565b5b5f613acb85828601613a94565b9250506020613adc85828601613a3f565b9150509250929050565b613aef81613a20565b82525050565b5f604082019050613b085f830185613968565b613b156020830184613ae6565b9392505050565b5f819050919050565b5f613b3f613b3a613b3584613938565b613b1c565b613938565b9050919050565b5f613b5082613b25565b9050919050565b5f613b6182613b46565b9050919050565b613b7181613b57565b82525050565b5f602082019050613b8a5f830184613b68565b92915050565b5f6080820190508181035f830152613ba881876139c8565b9050613bb76020830186613ae6565b613bc46040830185613ae6565b613bd16060830184613ae6565b95945050505050565b5f602082019050613bed5f830184613ae6565b92915050565b5f805f60608486031215613c0a57613c0961387d565b5b5f613c1786828701613a94565b9350506020613c2886828701613a94565b9250506040613c3986828701613a3f565b9150509250925092565b5f60208284031215613c5857613c5761387d565b5b5f613c6584828501613a94565b91505092915050565b5f8060408385031215613c8457613c8361387d565b5b5f613c9185828601613a3f565b9250506020613ca285828601613a3f565b9150509250929050565b613cb581613905565b8114613cbf575f80fd5b50565b5f81359050613cd081613cac565b92915050565b5f8060408385031215613cec57613ceb61387d565b5b5f613cf985828601613a94565b9250506020613d0a85828601613cc2565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d4681613957565b82525050565b613d5581613a20565b82525050565b604082015f820151613d6f5f850182613d3d565b506020820151613d826020850182613d4c565b50505050565b5f613d938383613d5b565b60408301905092915050565b5f602082019050919050565b5f613db582613d14565b613dbf8185613d1e565b9350613dca83613d2e565b805f5b83811015613dfa578151613de18882613d88565b9750613dec83613d9f565b925050600181019050613dcd565b5085935050505092915050565b5f6020820190508181035f830152613e1f8184613dab565b905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613e65826139b8565b810181811067ffffffffffffffff82111715613e8457613e83613e2f565b5b80604052505050565b5f613e96613874565b9050613ea28282613e5c565b919050565b5f67ffffffffffffffff821115613ec157613ec0613e2f565b5b613eca826139b8565b9050602081019050919050565b828183375f83830152505050565b5f613ef7613ef284613ea7565b613e8d565b905082815260208101848484011115613f1357613f12613e2b565b5b613f1e848285613ed7565b509392505050565b5f82601f830112613f3a57613f39613e27565b5b8135613f4a848260208601613ee5565b91505092915050565b5f805f8060808587031215613f6b57613f6a61387d565b5b5f613f7887828801613a94565b9450506020613f8987828801613a94565b9350506040613f9a87828801613a3f565b925050606085013567ffffffffffffffff811115613fbb57613fba613881565b5b613fc787828801613f26565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6140078383613d3d565b60208301905092915050565b5f602082019050919050565b5f61402982613fd3565b6140338185613fdd565b935061403e83613fed565b805f5b8381101561406e5781516140558882613ffc565b975061406083614013565b925050600181019050614041565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6140af8383613d4c565b60208301905092915050565b5f602082019050919050565b5f6140d18261407b565b6140db8185614085565b93506140e683614095565b805f5b838110156141165781516140fd88826140a4565b9750614108836140bb565b9250506001810190506140e9565b5085935050505092915050565b5f6040820190508181035f83015261413b818561401f565b9050818103602083015261414f81846140c7565b90509392505050565b5f806040838503121561416e5761416d61387d565b5b5f61417b85828601613a94565b925050602061418c85828601613a94565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806141da57607f821691505b6020821081036141ed576141ec614196565b5b50919050565b5f6060820190506142065f830186613968565b6142136020830185613ae6565b6142206040830184613968565b949350505050565b7f546f6b656e732068617665206e6f74206265656e2069737375656400000000005f82015250565b5f61425c601b8361399a565b915061426782614228565b602082019050919050565b5f6020820190508181035f83015261428981614250565b9050919050565b7f4e756d626572206f6620746f6b656e73206d757374206265206265747765656e5f8201527f203120616e642038000000000000000000000000000000000000000000000000602082015250565b5f6142ea60288361399a565b91506142f582614290565b604082019050919050565b5f6020820190508181035f830152614317816142de565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6500000000005f82015250565b5f614352601b8361399a565b915061435d8261431e565b602082019050919050565b5f6020820190508181035f83015261437f81614346565b9050919050565b7f41646472657373206e6f742077686974656c69737465640000000000000000005f82015250565b5f6143ba60178361399a565b91506143c582614386565b602082019050919050565b5f6020820190508181035f8301526143e7816143ae565b9050919050565b7f4164647265737320626c61636b6c6973746564000000000000000000000000005f82015250565b5f61442260138361399a565b915061442d826143ee565b602082019050919050565b5f6020820190508181035f83015261444f81614416565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61448d82613a20565b915061449883613a20565b92508282026144a681613a20565b915082820484148315176144bd576144bc614456565b5b5092915050565b5f815190506144d281613a29565b92915050565b5f602082840312156144ed576144ec61387d565b5b5f6144fa848285016144c4565b91505092915050565b7f496e73756666696369656e7420555344432062616c616e6365000000000000005f82015250565b5f61453760198361399a565b915061454282614503565b602082019050919050565b5f6020820190508181035f8301526145648161452b565b9050919050565b5f60408201905061457e5f830185613968565b61458b6020830184613968565b9392505050565b7f5553444320616c6c6f77616e636520746f6f206c6f77000000000000000000005f82015250565b5f6145c660168361399a565b91506145d182614592565b602082019050919050565b5f6020820190508181035f8301526145f3816145ba565b9050919050565b5f60608201905061460d5f830186613968565b61461a6020830185613968565b6146276040830184613ae6565b949350505050565b5f8151905061463d81613cac565b92915050565b5f602082840312156146585761465761387d565b5b5f6146658482850161462f565b91505092915050565b5f61467882613a20565b915061468383613a20565b925082820190508082111561469b5761469a614456565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6146d882613a20565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361470a57614709614456565b5b600182019050919050565b5f6040820190506147285f830185613ae6565b6147356020830184613ae6565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61477382613a20565b915061477e83613a20565b92508261478e5761478d61473c565b5b828204905092915050565b5f6147a382613a20565b91506147ae83613a20565b92508282039050818111156147c6576147c5614456565b5b92915050565b7f546f6b656e73206861766520616c7265616479206265656e20697373756564005f82015250565b5f614800601f8361399a565b915061480b826147cc565b602082019050919050565b5f6020820190508181035f83015261482d816147f4565b9050919050565b5f81905092915050565b5f61484882613990565b6148528185614834565b93506148628185602086016139aa565b80840191505092915050565b5f614879828561483e565b9150614885828461483e565b91508190509392505050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026148ed7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826148b2565b6148f786836148b2565b95508019841693508086168417925050509392505050565b5f61492961492461491f84613a20565b613b1c565b613a20565b9050919050565b5f819050919050565b6149428361490f565b61495661494e82614930565b8484546148be565b825550505050565b5f90565b61496a61495e565b614975818484614939565b505050565b5b818110156149985761498d5f82614962565b60018101905061497b565b5050565b601f8211156149dd576149ae81614891565b6149b7846148a3565b810160208510156149c6578190505b6149da6149d2856148a3565b83018261497a565b50505b505050565b5f82821c905092915050565b5f6149fd5f19846008026149e2565b1980831691505092915050565b5f614a1583836149ee565b9150826002028217905092915050565b614a2e82613990565b67ffffffffffffffff811115614a4757614a46613e2f565b5b614a5182546141c3565b614a5c82828561499c565b5f60209050601f831160018114614a8d575f8415614a7b578287015190505b614a858582614a0a565b865550614aec565b601f198416614a9b86614891565b5f5b82811015614ac257848901518255600182019150602085019450602081019050614a9d565b86831015614adf5784890151614adb601f8916826149ee565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f614b1882614af4565b614b228185614afe565b9350614b328185602086016139aa565b614b3b816139b8565b840191505092915050565b5f608082019050614b595f830187613968565b614b666020830186613968565b614b736040830185613ae6565b8181036060830152614b858184614b0e565b905095945050505050565b5f81519050614b9e816138b0565b92915050565b5f60208284031215614bb957614bb861387d565b5b5f614bc684828501614b90565b9150509291505056fea2646970667358221220da1ab5763434fad4ffc62dbe3ff0c3143b1ce9830f4133eb4b3c617d8adb785564736f6c634300081a0033697066733a2f2f516d556f505941437546417741585979333138666d61366338396f67794a78436a7a44555642633567334b523858363239204841524c454d20415645202320312c20464f52455354205041524b2c20494c203630313330000000000000000000000000f31b086459c2cdac006feedd9080223964a9cddb