60806040526009600155600154600a6200001a9190620004d9565b6506504f71ac006200002d91906200052a565b6002556002546003556040518060400160405280600a81526020017f5361696e74205065706500000000000000000000000000000000000000000000815250600490816200007c9190620007e5565b506040518060400160405280600781526020017f53542e504550450000000000000000000000000000000000000000000000000081525060059081620000c39190620007e5565b506001600660006101000a81548160ff021916908315150217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a60006101000a81548160ff0219169083151502179055503480156200015c57600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a333600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600254600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040516200033e9190620008dd565b60405180910390a3620008fa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620003da57808604811115620003b257620003b16200034c565b5b6001851615620003c25780820291505b8081029050620003d2856200037b565b945062000392565b94509492505050565b600082620003f55760019050620004c8565b81620004055760009050620004c8565b81600181146200041e576002811462000429576200045f565b6001915050620004c8565b60ff8411156200043e576200043d6200034c565b5b8360020a9150848211156200045857620004576200034c565b5b50620004c8565b5060208310610133831016604e8410600b8410161715620004995782820a9050838111156200049357620004926200034c565b5b620004c8565b620004a8848484600162000388565b92509050818404811115620004c257620004c16200034c565b5b81810290505b9392505050565b6000819050919050565b6000620004e682620004cf565b9150620004f383620004cf565b9250620005227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620003e3565b905092915050565b60006200053782620004cf565b91506200054483620004cf565b92508282026200055481620004cf565b915082820484148315176200056e576200056d6200034c565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005f757607f821691505b6020821081036200060d576200060c620005af565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000638565b62000683868362000638565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620006c6620006c0620006ba84620004cf565b6200069b565b620004cf565b9050919050565b6000819050919050565b620006e283620006a5565b620006fa620006f182620006cd565b84845462000645565b825550505050565b600090565b6200071162000702565b6200071e818484620006d7565b505050565b5b8181101562000746576200073a60008262000707565b60018101905062000724565b5050565b601f82111562000795576200075f8162000613565b6200076a8462000628565b810160208510156200077a578190505b62000792620007898562000628565b83018262000723565b50505b505050565b600082821c905092915050565b6000620007ba600019846008026200079a565b1980831691505092915050565b6000620007d58383620007a7565b9150826002028217905092915050565b620007f08262000575565b67ffffffffffffffff8111156200080c576200080b62000580565b5b620008188254620005de565b620008258282856200074a565b600060209050601f8311600181146200085d576000841562000848578287015190505b620008548582620007c7565b865550620008c4565b601f1984166200086d8662000613565b60005b82811015620008975784890151825560018201915060208501945060208101905062000870565b86831015620008b75784890151620008b3601f891682620007a7565b8355505b6001600288020188555050505b505050505050565b620008d781620004cf565b82525050565b6000602082019050620008f46000830184620008cc565b92915050565b6120de806200090a6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80635932ead1116100b85780638da5cb5b1161007c5780638da5cb5b1461035357806395d89b4114610371578063a457c2d71461038f578063a9059cbb146103bf578063c9567bf9146103ef578063dd62ed3e146103f957610142565b80635932ead1146102c35780635d0044ca146102df5780636c0a24eb146102fb57806370a0823114610319578063715018a61461034957610142565b8063313ce5671161010a578063313ce567146101ff57806331503ec41461021d57806332424aa31461023957806339509351146102575780633eaaf86b146102875780635810facd146102a557610142565b80630204f6771461014757806306fdde0314610163578063095ea7b31461018157806318160ddd146101b157806323b872dd146101cf575b600080fd5b610161600480360381019061015c9190611699565b610429565b005b61016b6104d4565b6040516101789190611776565b60405180910390f35b61019b6004803603810190610196919061182c565b610566565b6040516101a89190611887565b60405180910390f35b6101b961057d565b6040516101c691906118b1565b60405180910390f35b6101e960048036038101906101e491906118cc565b610587565b6040516101f69190611887565b60405180910390f35b610207610628565b60405161021491906118b1565b60405180910390f35b6102376004803603810190610232919061191f565b610632565b005b6102416106eb565b60405161024e91906118b1565b60405180910390f35b610271600480360381019061026c919061182c565b6106f1565b60405161027e9190611887565b60405180910390f35b61028f61078f565b60405161029c91906118b1565b60405180910390f35b6102ad610795565b6040516102ba919061195b565b60405180910390f35b6102dd60048036038101906102d891906119a2565b6107bb565b005b6102f960048036038101906102f491906119cf565b61084d565b005b6103036108cc565b60405161031091906118b1565b60405180910390f35b610333600480360381019061032e919061191f565b6108d2565b60405161034091906118b1565b60405180910390f35b61035161091b565b005b61035b610a4e565b604051610368919061195b565b60405180910390f35b610379610a77565b6040516103869190611776565b60405180910390f35b6103a960048036038101906103a4919061182c565b610b09565b6040516103b69190611887565b60405180910390f35b6103d960048036038101906103d4919061182c565b610c30565b6040516103e69190611887565b60405180910390f35b6103f7610c47565b005b610413600480360381019061040e91906119fc565b610cd9565b60405161042091906118b1565b60405180910390f35b60005b828290508110156104cf5761043f610d60565b156104bc576001436104519190611a6b565b6009600085858581811061046857610467611a9f565b5b905060200201602081019061047d919061191f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80806104c790611ace565b91505061042c565b505050565b6060600480546104e390611b45565b80601f016020809104026020016040519081016040528092919081815260200182805461050f90611b45565b801561055c5780601f106105315761010080835404028352916020019161055c565b820191906000526020600020905b81548152906001019060200180831161053f57829003601f168201915b5050505050905090565b6000610573338484610db8565b6001905092915050565b6000600254905090565b6000610594848484610f81565b81600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561061d57600080fd5b600190509392505050565b6000600154905090565b3373ffffffffffffffffffffffffffffffffffffffff16610651610a4e565b73ffffffffffffffffffffffffffffffffffffffff16146106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069e90611bc2565b60405180910390fd5b80600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60015481565b6000610785338484600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107809190611a6b565b610db8565b6001905092915050565b60025481565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff166107da610a4e565b73ffffffffffffffffffffffffffffffffffffffff1614610830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082790611bc2565b60405180910390fd5b80600660006101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff1661086c610a4e565b73ffffffffffffffffffffffffffffffffffffffff16146108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990611bc2565b60405180910390fd5b8060038190555050565b60035481565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff1661093a610a4e565b73ffffffffffffffffffffffffffffffffffffffff1614610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790611bc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610a8690611b45565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab290611b45565b8015610aff5780601f10610ad457610100808354040283529160200191610aff565b820191906000526020600020905b815481529060010190602001808311610ae257829003601f168201915b5050505050905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610b9457600080fd5b610c26338484600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c219190611be2565b610db8565b6001905092915050565b6000610c3d338484610f81565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16610c66610a4e565b73ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390611bc2565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1e90611c88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90611d1a565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f7491906118b1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fba57600080fd5b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614801561104257508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156110565761105181836112be565b6112b9565b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156110a257600080fd5b600080600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414158015611132575043600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411155b15611163576111606103e86111526103e58561155290919063ffffffff16565b6115cc90919063ffffffff16565b90505b81600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111ae9190611be2565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080826111fd9190611be2565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461124b9190611a6b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516112af91906118b1565b60405180910390a3505b505050565b6112eb30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610db8565b81600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600267ffffffffffffffff81111561134c5761134b611d3a565b5b60405190808252806020026020018201604052801561137a5781602001602082028036833780820191505090505b509050308160008151811061139257611391611a9f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145d9190611d7e565b8160018151811061147157611470611a9f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486601f426114fb9190611a6b565b6040518663ffffffff1660e01b815260040161151b959493929190611eae565b600060405180830381600087803b15801561153557600080fd5b505af1158015611549573d6000803e3d6000fd5b50505050505050565b600080830361156457600090506115c6565b600082846115729190611f08565b90508284826115819190611f79565b146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061201c565b60405180910390fd5b809150505b92915050565b6000808211611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790612088565b60405180910390fd5b6000828461161e9190611f79565b90508091505092915050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261165957611658611634565b5b8235905067ffffffffffffffff81111561167657611675611639565b5b6020830191508360208202830111156116925761169161163e565b5b9250929050565b600080602083850312156116b0576116af61162a565b5b600083013567ffffffffffffffff8111156116ce576116cd61162f565b5b6116da85828601611643565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611720578082015181840152602081019050611705565b60008484015250505050565b6000601f19601f8301169050919050565b6000611748826116e6565b61175281856116f1565b9350611762818560208601611702565b61176b8161172c565b840191505092915050565b60006020820190508181036000830152611790818461173d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117c382611798565b9050919050565b6117d3816117b8565b81146117de57600080fd5b50565b6000813590506117f0816117ca565b92915050565b6000819050919050565b611809816117f6565b811461181457600080fd5b50565b60008135905061182681611800565b92915050565b600080604083850312156118435761184261162a565b5b6000611851858286016117e1565b925050602061186285828601611817565b9150509250929050565b60008115159050919050565b6118818161186c565b82525050565b600060208201905061189c6000830184611878565b92915050565b6118ab816117f6565b82525050565b60006020820190506118c660008301846118a2565b92915050565b6000806000606084860312156118e5576118e461162a565b5b60006118f3868287016117e1565b9350506020611904868287016117e1565b925050604061191586828701611817565b9150509250925092565b6000602082840312156119355761193461162a565b5b6000611943848285016117e1565b91505092915050565b611955816117b8565b82525050565b6000602082019050611970600083018461194c565b92915050565b61197f8161186c565b811461198a57600080fd5b50565b60008135905061199c81611976565b92915050565b6000602082840312156119b8576119b761162a565b5b60006119c68482850161198d565b91505092915050565b6000602082840312156119e5576119e461162a565b5b60006119f384828501611817565b91505092915050565b60008060408385031215611a1357611a1261162a565b5b6000611a21858286016117e1565b9250506020611a32858286016117e1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a76826117f6565b9150611a81836117f6565b9250828201905080821115611a9957611a98611a3c565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611ad9826117f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b0b57611b0a611a3c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611b5d57607f821691505b602082108103611b7057611b6f611b16565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611bac6020836116f1565b9150611bb782611b76565b602082019050919050565b60006020820190508181036000830152611bdb81611b9f565b9050919050565b6000611bed826117f6565b9150611bf8836117f6565b9250828203905081811115611c1057611c0f611a3c565b5b92915050565b7f4945524332303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611c726023836116f1565b9150611c7d82611c16565b604082019050919050565b60006020820190508181036000830152611ca181611c65565b9050919050565b7f4945524332303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611d046025836116f1565b9150611d0f82611ca8565b604082019050919050565b60006020820190508181036000830152611d3381611cf7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050611d78816117ca565b92915050565b600060208284031215611d9457611d9361162a565b5b6000611da284828501611d69565b91505092915050565b6000819050919050565b6000819050919050565b6000611dda611dd5611dd084611dab565b611db5565b6117f6565b9050919050565b611dea81611dbf565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611e25816117b8565b82525050565b6000611e378383611e1c565b60208301905092915050565b6000602082019050919050565b6000611e5b82611df0565b611e658185611dfb565b9350611e7083611e0c565b8060005b83811015611ea1578151611e888882611e2b565b9750611e9383611e43565b925050600181019050611e74565b5085935050505092915050565b600060a082019050611ec360008301886118a2565b611ed06020830187611de1565b8181036040830152611ee28186611e50565b9050611ef1606083018561194c565b611efe60808301846118a2565b9695505050505050565b6000611f13826117f6565b9150611f1e836117f6565b9250828202611f2c816117f6565b91508282048414831517611f4357611f42611a3c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611f84826117f6565b9150611f8f836117f6565b925082611f9f57611f9e611f4a565b5b828204905092915050565b7f536166654d6174683a20206d756c7469706c69636174696f6e206f766572666c60008201527f6f77000000000000000000000000000000000000000000000000000000000000602082015250565b60006120066022836116f1565b915061201182611faa565b604082019050919050565b6000602082019050818103600083015261203581611ff9565b9050919050565b7f536166654d6174683a20206469766973696f6e206279207a65726f0000000000600082015250565b6000612072601b836116f1565b915061207d8261203c565b602082019050919050565b600060208201905081810360008301526120a181612065565b905091905056fea26469706673582212205607ccf6c0c1416ca052d7fe01c7a50a8fd01821344da3a65ff20ba50491b22564736f6c63430008130033